공부하며 적는 글입니다. 정확하지 않을 수 있습니다.
init의 종류는 다양하지만 Designated init과 convenience init 에 대해 알아보겠다.
일단 우리가 가장 잘 아는 지정 이니셜라이저는 Swift의 초기화 이니셜라이저이다.
이 init은 클래스의 모든 프로퍼티가 초기화 될 수 있도록 해줘야 한다.
class Person {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
이렇게 말이다.
근데 여기서 프로퍼티가 하나라도 빠지게 되면,
이렇게 오류를 뿜는다.
자, 이쯤에서 convenience init 를 알아보면 될 듯하다.
convenience init은 "보조 이니셜라이저" 이다.
클래스의 원래 이니셜라이저인 init을 도와주는 역할을 하게 된다.
지정 이니셜라이저의 파라미터 중 일부를 기본값으로 설정해서, 이 편의 이니셜라이저 안에서 지정 이니셜라이저를 호출 하여 초기화를 진행할 수 있다.
따라서 편의 이니셜라이저를 사용하려면 지정 이니셜라이저가 무조건 선언되어 있어야 한다.
또한 Swift의 이니셜라이저의 규칙이 몇 가지 존재하는데,
"convenience init(편의 이니셜라이저)는 같은 클래스에서 다른 이니셜라이저를 호출해야한다." 라는 규칙이 존재한다.
class Person {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(age: Int) {
self.init(name: "Kirri", age: age)
}
}
이렇게 바로 사용할 수가 있다.
파라미터로 지정하지 않은 값은 개발자가 임의로 지정하게 되고, 파라미터로 넘어간 것만 넣어주면 된다.
Designated init과 convenience init 에 대해 알아보았다.
Designated init은 클래스의 모든 프로퍼티를 초기화 될 수 있도록 선언해주어야 하고,convenience init은 Designated init을 도와주는 역할로 다른 파라미터를 설정하여 확장할 수 있는 기능이다.