Swift) 편의 생성자(Convenience init)
안녕하세요. 도미닉입니다.
오늘은 편의 생성자에 대해서 알아보겠습니다.
보통 클래스나 구조체를 생성할 때 생성자를 사용하게 됩니다.
그렇다면 편의 생성자는 무엇일까요?
생성자에 대해서 같이 알아보시죠
지정 생성자란?
생성자에는 지정 생성자와 편의 생성자가 있습니다. 지정 생성자는 저희가 주로 사용하던 init 으로 시작하는 메서드입니다.
class Dog {
let name: String
init(name: String) {
self.name = name
}
}
이런 형태로 생성자를 만드는 것이 지정 생성자였습니다.
편의 생성자란?
편의 생성자는 다른 생성자를 호출하며 편하게 생성할 수 있도록 추가로 만드는 생성자입니다.
class Dog {
let name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "누렁이")
}
}
위와 같은 형태로 편의 생성자를 만들어서 기존의 지정 생성자를 호출하여 인스턴스를 생성합니다.
편의 생성자는 같은 클래스의 편의 생성자를 호출할 수도 있습니다.(꼭 지정 생성자를 호출해야 하는 것은 아니다, 다른 편의 생성자들을 호출할 수 있지만 마지막으로 호출된 편의 생성자는 지정 생성자를 호출해야만 한다)
아래는 애플 공식 문서의 이미지입니다.
클래스를 상속 받으면 자식 클래스의 지정 생성자는 부모 클래스의 지정 생성자를 호출해야 합니다.
자식 클래스의 지정 생성자에서 상위 클래스의 지정 생성자를 꼭 호출해야 하는 것을 델리게이트 업(Delegate up)이라고 합니다.
편의 생성자는 동일한 클래스의 다른 편의 생성자 또는 지정 생성자를 호출해야하는 것을 델리게이트 어크로스(Delegate across) 라고 합니다.
정리
오늘은 편의 생성자에 대해서 알아보고 델리게이트 업, 델리게이트 어크로스라는 용어에 대해서 알아봤습니다.
편의 생성자는 같은 클래스의 생성자를 호출해야만 하고 궁극적으로는 지정 생성자를 호출하여야 했습니다.
델리게이트 업은 자식 클래스의 지정 생성자는 부모 클래스의 지정 생성자를 호출해야만 하는 규칙이었습니다.
델리게이트 어크로스는 같은 클래스의 생성자를 호출해야만 했고 편의 생성자를 호출했다면 마지막으로 호출되는 편의 생성자는 지정 생성자를 호출해야만 하는 규칙입니다.
조금은 생소한 용어였는데요. 그림과 글을 보고 이해되셨길 바라겠습니다.
글 읽어주셔서 감사합니다.
참고 : https://docs.swift.org/swift-book/documentation/the-swift-programming-language/initialization/