클래스와 초기화에 대한 개념이 가물~가물 하다면?! -> 클래스와 초기화 글 다시보기
클래스에서 자동, 지정 초기화, 편리 초기화 개념이 가물~가물~ 하다면?! -> 자동, 지정, 편리 초기화 글 다시보기
2단계 초기화
클래스 초기화는 2 단계를 거쳐서 진행된다.
- 해당 클래스의 저장 프로퍼티는 초기값으로 모두 초기화 ( 부모 또한 super Designated or 자식 클래스에서 전부 초기화)
- 자식방향으로 내려오며 초기화된 프로퍼티 중 일부를 필요에 맞게 커스터마이징 하는 단계
2 단계에서 에러없이 초기화가 완료되었음을 보장하기 위해 4단계 안전 점검을 진행한다.
안전 점검 단계
안전 점검 1
지정 초기화 메소드는 부모 초기화 메소드 호출 전에, 해당 클래스에서 정의 된 모든 저장 프로퍼티 초기화 해야 한다.
안전 점검 2
상속받은 저장 프로퍼티 직접 초기화 하려면, 그 이전에 부모 초기화 메소드 호출 해야한다.
그렇지 않을 경우 자신이 해당 프로퍼티 초기화 한 이후에 부모 클래스가 다시 지정된 다른 값으로 초기화 진행 할 수 있음,,
안전 점검 3
편의 초기화에서 저장 프로퍼티 직접 초기화 하려면 그 이전에 다른 초기화 메소드를 호출 해주어야 한다.
그렇지 않을 경우 안전점검 2와 유사한 상황처럼 Concenience에서 초기화한 저장 프로퍼티를 Designated에서 다시 초기화 할 수 있기 때문,,
안전 점검 4
1단계 초기화가 끝나기 전에는 인스턴스 메소드 사용 x . 인스턴스 프로퍼티 읽을수도 없고, self 참조 불가. (1단계 진행 안되면 메모리에 할당 안됬어 아직)
클래스 초기화 1단계 과정
// 재은씨 실전편 p 449 참고
클래스 초기화 1단계 과정
1. 클래스에서는 Designated or Convenience init 호출
2. 해당 클래스 타입의 변수에 메모리 할당됨 ( but 메모리 초기화 x)
3. 지정 초기화 호출되며 해당 클리스의 변수들이 초기화 된다. 아직 super클래스의 Designated 호출 x
4. 해당 클래스의 변수 초기화 이후 super의 Designated를 호출하며 부모 클래스의 저장 프로퍼티들 초기화
5. 초기화 메소드의 연쇄 호출 과정에 의해 최상의 super Designated 가 호출될때까지 3, 4 과정 반복
클래스 초기화 2단계 과정
클래스 초기화 2단계 과정
1단계 과정에서 초기화된 저장 프로퍼티 중 원하는 것들만 원하는 값으로 덮어 씌우는 과정
1. 계층의최상의 클래스에서 자식 클래스로 내려간다.
2. 지정 초기화 메소드의 뒷부분에서 필요한 커스터마이징이 실행됨!!!?!!?!?
3. 1, 2과정 반복
이제 self메서드, 인스턴스 메소드를 참조할 수 있다.
'Swift > Deep dive!!' 카테고리의 다른 글
[Swift] 클로저 @escaping과 @non-escaping의 생명주기, 개념과 차이 탐구 (2) | 2022.11.13 |
---|---|
[Swift] Array 의미와 선언(Set과의 차이점은?), 자주 사용하는 함수(in 코테) (0) | 2022.08.02 |
[Swift] 자동, 지정, 편의 초기화(in class). 연쇄 호출 관계 뿌수기!! (0) | 2022.07.09 |
[Swift] class 초기화. 왜 super.init()을 쓰는가? (오버로딩, 오버라이딩) (0) | 2022.07.09 |