JuSeok

Convenience

init과 Convenience init의 차이

Swift에서 초기화는 2가지 종류가 있다.

지정 초기화인 init, (Designated init이라고도 한다.)와 Convenience init이다.

init은 클래스의 모든 프로퍼티가 초기화 되어야 한다는 특성이 있다.

class Student {
    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
    }
}

위 코드는 지정 초기화 예시이다.

만약 3개의 프로퍼티 중 하나라도 초기화에서 빠지면 오류가 난다.



반면에 Convenience init은 편의 초기화이다.

바로 예시 코드를 보며 특성을 알아보자.

class Student {
    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(name: String, age: Int) {
        self.init(name: name, age: age, gender: "male")
    }
}

Convenience init은 보조 초기화라고도 불리는데, 말 그대로 원래 init을 보조해주는 역할을 한다.

Designated init은 모든 프로퍼티가 초기화 되어야 하지만 Convenience init은 내부에 Designated init을 포함해야만 하기 때문에 프로퍼티의 일부만 받는 위와 같은 예제가 가능해진다.


몰랐을 땐 대단한 기술인지 알았지만 알고보니 간단해 매우 유용하게 쓸 수 있을 것 같다.



참고자료

Tags