Swift - Initialization(Required initializer)

이원석·2024년 11월 27일

Swift

목록 보기
21/38

Required initializer

필수 생성자로, 슈퍼 클래스에서 정의해둘 경우 서브 클래스가 슈퍼 클래스의 생성자를 상속받지 않는 한 서브클래스에서 반드시 구현해주어야 한다.

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

class Sodeul: Human {
    var nickName: String
    
    init(nickName: String) {
        self.nickName = nickName
        super.init(name: "")
    }
    
    required init(name: String) {// required init 작성
        fatalError("init(name:) has not been implemented")
    }
}

class Sodeul: Human {
    var nickName: String? // 모든 프로퍼티가 기본 값을 가지고 있어 생성자를 따로 
                          //작성하지 않으면 부모 클래스의 지정생성자를 모두 상속 
                          // -> required init을 구현하지않아도 됨
}
  • 오버라이딩 이지만 override키워드 없이, 슈퍼클래스와 동일한 형태로 구현해 줘야 함
  • 부모의 모든생성자를 상속받으면 부모에 선언되어 있는 required init을 상속 받기 때문에 구현하지 않아도 됨 -> 만약 자식 클래스에서 지정생성자를 구현했다면 더이상 상속 받지 않아 구현해 줘야함.

0개의 댓글