초기화의 종류에는 크게 2가지로 Designated, convenience가 있습니다. 이는 모든 멤버를 초기화하고 상속받은 멤버들을 customizing을 하기 위해서 입니다.
swift의 초기화 이니셜라이저로, 본 이름은 Designated init( 지정 이니셜라이저 )입니다.
init은 클래스의 모든 프로퍼티가 초기화 될 수 있도록 만들어주는 역할
모든 클래스의 프로퍼티를 초기화해야 합니다. → 지키지 않을시 오류 발생
class Person {
var name: String
var age: Int
var gender: String
init(name: String, age: Int, gender: String) {
self.name = name
self.age = age
self.gender = gender
}
}
보조 이니셜라이저로, 클래스의 원래 이니셜라이저인 init을 도와주는 역할을 합니다.
convenience init은 같은 클래스에서 다른 이니셜라이저를 호출해야한다는 규칙이 있습니다.
init의 파라미터 중 일부를 기본값을 설정해서, convenience init안에서 init을 호출하여 초기화 진행할 수 있습니다. ( = Convenience init 내부에서 반드시 Designated init이 호출되어야 합니다 self.init() )
즉, 파라미터로 넘겨주지 않은 값은 그냥 임의로 지정해주고, 파라미터로 넘어간 것들만 넣어주면 됩니다.
class Person {
var name: String
var age: Int
var gender: String
init(name: String, age: Int, gender: String) {
self.name = name
self.age = age
self.gender = gender
}
convenience init(age: Int, gender: String) {
self.init(name: "zedd", age: age, gender: gender)
}
}
모든 멤버가 초기화 되어야한다는 보장
D init - 반드시 바로 위 super class의 D init을 호출해야합니다.
( delegation : sub class에서 super class의 init호출 )
C init - 반드시 같은 클래스의 D init을 호출해야합니다.
( D init이 이미 모든 멤버 초기화를 보장하기 때문에 )
[iOS - swift] Designated init, Convenience init, 초기화의 핵심, 초기화 상속