[swift] 초기화 완료를 나타내는 required init?

Swift에서 클래스의 초기화를 제어하고 완료된 것을 나타내기 위해 required init을 사용할 수 있습니다. required 키워드는 해당 이니셜라이저가 모든 하위 클래스에서 구현되어야 함을 나타내며, init 키워드는 이니셜라이저임을 표시합니다.

required init의 사용 예시:

class ParentClass {
    var name: String
    
    required init(name: String) {
        self.name = name
    }
}

class ChildClass: ParentClass {
    var age: Int
    
    init(name: String, age: Int) {
        self.age = age
        super.init(name: name)
    }
    
    // 하위 클래스에서 required init 구현
    required init(name: String) {
        self.age = 0
        super.init(name: name)
    }
}

위의 코드 예시에서 ParentClass는 required init을 사용하여 name 속성을 초기화합니다. 이니셜라이저가 required로 표시되었기 때문에 모든 하위 클래스에서 구현되어야 합니다. 따라서 ChildClass에서도 required init을 사용하여 name 속성을 초기화하도록 하였습니다.

ChildClass에는 추가적인 속성인 age가 있으며, init 메서드에서 name과 age를 모두 초기화합니다. super.init을 통해 상위 클래스인 ParentClass의 초기화 메서드를 호출하고 있습니다.

또한, ChildClass에서는 required init을 다시 구현하여 name 속성을 초기화하도록 하였습니다. 이 부분은 상속받은 required init을 오버라이딩한 것입니다.

이렇게 required init을 사용하면 상속 관계에서 초기화를 제어하고, 초기화가 완료되었음을 명시적으로 표시할 수 있습니다.

참고 문서: