Swift 공식문서 읽기...Day11

김민종·2021년 8월 27일
0

Swift Doc

목록 보기
11/26

Initialization 두번째 파트로 2단계 초기화 부터 공부하였다.

Two-Phase Initialization
클래스에서 초기화는 2단계로 진행된다. 첫번째 단계에서 프로퍼티는 초기값으로 초기화된다. 두번째 단계는 인스턴스의 사용 전 저장된 프로퍼티를 커스터마이징하는 과정이다. 컴파일러에선 이러한 두단계가 에러없이 완료되기 위해 4가지 안전확인을 진행한다.

안전확인 1단계- 지정 클래스 안에서 초기화를 초기자에게 위임하기 전에 모든 프로퍼티를 초기화 해야한다.

안전확인 2단계 - 지정초기자는 반드시 값을 할당하기 전에 superclass의 초기자로 위임을 넘겨야한다.

안전확인 3단계 - 편리한 초기자는 반드시 어떤 프로퍼티를 할당하기 전에 다른 초기자로 위임을 넘겨야 한다.

안전확인 4단계 - 이니셜라이저는 초기화의 1단계가 끝나기 전에는 self의 값을 참조하거나 어떤 인스턴스 프로퍼티, 메소드 등을 호출하거나 읽을 수 없다.

Initializer Inheritance and Overriding
스위프트에서는 슈퍼클래스에서 서브클래스의 이니셜라이저를 상속하지않는다. 슈퍼클래스의 이니셜라이저가 무분별하게 사용되는 것을 막기위해서다.
만약 클래스에서 커스텀 초기자를 설정하지 않았다면 기본초기자인 init()을 사용할 수 있고 오버라이드 하기 위해서는 override키워드를 붙혀줘야한다.
override시 super.init()을 통해슈퍼클래스의 초기값을 불러와서 수정할 수있다.

Automatic Initializer Inheritance
서브클래스는 수퍼클래스의 초기자를 기본적으로 상속하지 않는다.
두가지 규칙으로 1. 서브클래스가 지정초기화를 정의하지 않으면 자동으로 슈퍼클래스의 지정초기자를 상속한다. 2. 서브클래스가 수퍼클래스의 지정초기자를 모두 구현했다면 자동으로 편리한 초기자를 추가한다.

Failable Initializers
초기화 과정에서 실패할 수 있는 초기자를 init뒤에 ?를 붙혀서 실패가능한 초기자로 설정가능하다. 초기자 init은 값을 반환하지 않는다.

Propagation of Initialization Failure
실패가능한 초기자에서 실패가 되면 즉시 관련 초기자들이 중단된다.

Overriding a Failable Initializer
수퍼클래스엣 실패 가능한 초기자를 서브클래스에서 실패 불가능한 초기자로 바꿀 수 있다.

Required Initializers
모든 서브클래스에서 구현해야하는 초기자는 required 키워드를 init앞에 붙혀준다.

profile
신입 ios개발자입니다!

0개의 댓글