목록앱 개발/iOS (96)
나의 발자취
재정의(Overriding) Overloading vs Overriding /**============================================================================== - 오버로딩(overloading) - (엉어 뜻: 과적) 함수에서 함수의 하나의 이름에 여러 함수를 대응시켜서 사용 - 오버라이딩(overriding) - (영어 뜻: 재정의) 클래스의 상속에서 상위클래스의 속성/메서드를 재정의(기능을 약간 변형하여 사용)하는 것 - 재정의 - 서브클래스에서 슈퍼클래스의 동일한 멤버를 변형하여 구현 - 재정의 가능한 대상(멤버) - 1) 속성 (하지만, 저장 속성에 대한 재정의는 어떠한 경우에도 불가능) - 2) 메서드 (메서드, 서브스크립트, 생성자..
보호되어 있는 글입니다.
외부에서 private 로 선언된 속성/메서드에는 접근 불가 -> 은닉화(캡슐화) class SomeClass { private var name = "이름" func nameChange(name: String) { self.name = name } } var s = SomeClass() s.nameChange(name: "홍길동") 접근 제어가 필요한 이유? 애플이 자신들이 원하는 코드를 감출 수 있음 코드 영역을 분리시켜 효율적 관리 가능 컴파일 시간이 줄어듬(해당 변수가 어느 범위에서만 쓰이는지를 컴파일러가 인지 가능하므로)
서브스크립트 대괄호를 이용해서 접근가능하도록 만든 문법을 가르킴 - 배열에서 array[인덱스] - 딕셔너리에서 dictionary[키] var array = ["Apple", "Swift", "iOS", "Hello"] array[0] array[1] // 내부적으로 대괄호를 사용하면 어떤 값을 리턴하도록 구현이 되어 있어서 가능한 일 // 인스턴스.0 // 인스턴스.method() =====> 이런 형태가 아닌 // 인스턴스[파라미터] =====> 이런 형태로 동작을 가능하게한 문법 (대괄호로 메서드의 기능을 대신) 서브스크립트는 특별한 형태의 메서드 1) (인스턴스) 서브스크립트(Subscripts)의 직접 구현 - 클래스, 구조체, (열거형) 메서드기 때문에 인스턴스에 메모리 공간이 할당되어있지 ..

만약, 열거형의 케이스가 늘어난다면 항상 올바른 처리를 하고 있다고 말할 수 있을까? 만약에 로그인의 경우의 수가 늘어난다면 (Non-frozen 열거형 / 얼지않은) (프로젝트에서 실제 늘어날 수 있는 경우가 많음) enum LoginProvider: String { // 3가지 케이스 ===> 4가지 케이스 case email case facebook case google case kakaotalk } let userLogin = LoginProvider.email // 스위치문은 (특히, 열거형)표현식에 대한 분기처리에 최적화 // (다만, 열거형의 케이스가 늘어나는 경우에 대한 안정성 보장은 별개) switch userLogin { // 처리하는 방식을 조금 변형 case .email: print..
열거형 내부에 "연관값"을 사용 시 (1) 열거형 케이스 패턴, (2) 옵셔널 패턴이 나온다. 옵셔널 패턴에서는 let 변수? 라고 쓴다. let a: Int? = 1 // 1) 열거형 케이스 패턴 (앞에서 배운) switch a { case .some(let z): print(z) case .none: // nil이라고 써도됨 print("nil") } // 2) 옵셔널 패턴 (현재 배울) switch a { case let z?: // .some을 조금 더 간소화하는 문법 print(z) case nil: // .none 이라고 써도됨 print("nil") } 옵셔널 패턴의 사례(열거형 케이스와 비교) // 옵셔널타입으로 선언 let num: Int? = 7 print(num) // 1) 열거형 케..
열거형에 대한 구체적인 처리는 스위치문과 함께 쓸 때 사용성이 높아진다. 열거형은 한정된 사례로 만든 타입이고, 스위치문은 표현식에 대한 분기처리에 최적화 되어 있기 때문에 활용에 적합하다. // 로그인 타입을 정의 enum LoginProvider: String { // 3가지로 정의 case email case facebook case google } let userLogin = LoginProvider.facebook switch userLogin { // 3가지로 분기처리 case .email: print("이메일 로그인") case .facebook: print("페이스북 로그인") case .google: print("구글 로그인") } // 물론 특정한 경우도 처리 가능 if LoginPro..
메모리 공간에 임시적인 타입(optional(10) / nil)으로 들어있고 언랩핑을 통해 실제 값 10 또는 none으로 바뀌게 된다. 예를 들어, Int? -> ( .some / .none ) 으로 되어있으면 enum Optional { case some(Wrapped) case none } switch num { case .some(let a): // let a = 7 // 열거형 case 패턴을 활용해서, 내부 연관값을 꺼냄 print(a) case .none: print("nil") //print(num!) } ================================= .none과 nil은 완전히 동일 .none은 명시적인 열거형으로 표현한 것이고, 일반적으로는nil키워드(값이 없다)를 사용할뿐