Swift Class Initialization(Two-Phase Initialization)

고재경·2020년 12월 29일
1

이번 포스팅에서는 스위프트 클래스의 Two-Phase Initialization에 대해 알아보겠습니다.

Two-Phase Initialization이란?

간단하게 말하면 클래스를 생성할 시 초기화가 2단계에 걸쳐 이뤄진다고 할 수 있겠습니다.
이렇게 2단계에 걸친 클래스의 초기화는 클래스를 더욱 안전하게 다룰 수 있도록 하기 위함입니다.
해당 내용에 대한 스위프트 공식 문서의 내용을 확인해보았습니다.

Class initialization in Swift is a two-phase process. In the first phase, each stored property is assigned an initial value by the class that introduced it. Once the initial state for every stored property has been determined, the second phase begins, and each class is given the opportunity to customize its stored properties further before the new instance is considered ready for use.

문서의 내용을 요약하면

  • First Phase에서는 각각의 저장된 프로퍼티는 모두 초기화되어야 합니다. 이때, 초기화는 SubClass의 property부터하고, SuperClass의 property를 해줍니다.
  • Second Phase에서 각 클래스는 새 인스턴스를 사용할 준비가 된 것으로 간주되기 전에 저장된 속성을 추가로 사용자 정의 할 수 있습니다. Second Phase에서는 First Phase와는 반대로 SuperClass부터 SubClass로 설정해주어야 합니다.

Two-Phase Initialization Example

// SuperClass
class Study {
    var numOfMember: Int
    var studyTime: Int
    
    init(numOfMember: Int, studyTime: Int) {
        self.numOfMember = numOfMember
        self.studyTime = studyTime
    }
}


// SubClass
class BlogStudy: Study {
    var numOfPosting: Int
    
    init(numOfMember: Int, studyTime: Int, numOfPosting: Int) {
    	// Phase 1
        // 모든 Stored Property를 초기화
        // 이때 SubClass인 자신의 property를먼저 초기화 한 후
        self.numOfPosting = numOfPosting
        // SuperClass의 property를 초기화한다.
        super.init(numOfMember: numOfMember, studyTime: studyTime)
        
        // Phase 2 
        // Phase 1 수행 후 method등을 실행할 수 있다.
        self.posting()
    }
    
    func posting() {
        numOfPosting += 1
    }
}

References

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

0개의 댓글