Swift에서 초기화는 두 단계 과정을 거친ㄷ다
첫 번째 단계에서 저장된 각 프로퍼티는 해당 클래스에 의해 초기값이 할당 됩니다.
첫 번째 단계로 인해 모든 프로퍼티의 초기값이 할당되면, 두 번째 단계로 해당 인스턴스를 사용할 수 있는 상태로 간주하기 전에 프로퍼티 값을 사용자 정의할 수 있는 기회가 제공 됩니다. 두 단계 초기화는 초기화를 안전하게 만들도록 진행합니다
클래스의 새로운 인스턴스를 위한 메모리가 할당되며, 이때 메모리는 초기화 전이다 지정 초기화는 자신의 프로퍼티 값을 모두 초기화 시킨 후, 부모의 초기화 함수에 전달 됩니다 이 작업은 상속 고리의 최상단 부모 클래스에 도달할 때까지 계속 진행됩니다
이 작업으로 인해 최상위 부모의 프로퍼티까지 모두 기본 값으로 초기화 되면
이때 비로소 instance의 메모리가 완전히 초기화 되었다고 할 수 있으며,
1단계 초기화가 완료된 것입니다.
자 이제 이 긴 공식문서의 내용을 정리해서 보자면
즉! 1단계 초기화가 끝났다 = 비로소 인스턴스의 메모리가 완전히 초기화되었다!
→ 항상 순서는 내 프로퍼티 초기화
후에 부모 클래스 프로퍼티
초기화이다!
아래 코드와 같이 부모 클래스를 먼저 초기화하려고 하면 에러가 난다!
class SoptMember {
var name: String
var part: String
// 모든 프로퍼티를 초기화 하는 생성자
init(name: String, part: String) {
self.name = name
self.part = part
}
}
class PartLeader: SoptMember {
var alias: String
init(alias: String) {
super.init(name: "", part: "") // error
self.alias = alias
}
}
모든 프로퍼티가 초기화되지 않으면 사용할 수 없다!
최상위 부모 프로퍼티의 생성자까지 모두 호출 되어 1단계 초기화가 완료된 경우,
이때부턴 지정 초기화로부터 인스턴스를 구체화 할 기회를 부여 받습니다
이 단계부터 self에 접근할 수 있으며, 프로퍼티의 값 수정 및 메소드 호출 등등의 작업이 가능합니다
부모 클래스의 저장 프로퍼티 값을 변경할 수 있다
이것도 정리하자면..