관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] (초기화) designated init vs convenience init 본문

swift 5 문법

[iOS - swift] (초기화) designated init vs convenience init

jake-kim 2021. 6. 16. 00:40

Designated init (지정 초기화)

  • 역할: 해당 클래스에 의해 선언된 모든 property를 모두 초기화하고 적절한 super class의 init을 호출하여 super class까지 init 프로세스를 진행
  • Designated init은 그냥 "Designated"를 생략하여 그냥 init으로 사용

Convenience init (편의 초기화)

  • Designated init의 parameter중 일부를 기본값으로 설정하여 동일한 클래스에서 지정된 initializer를 호출하도록 정의

예시

  • designated init
class Person {
    let name: String
    let age: Int
    let birthDay: String

    init(name: String, age: Int, birthDay: String) {
        self.name = name
        self.age = age
        self.birthDay = birthDay
    }
}
  • convenience init
    • 또 다른 해석: 기존 designated init에 default를 주고 싶은 경우 사용
class Person {
    let name: String
    let age: Int
    let birthDay: String

    init(name: String, age: Int, birthDay: String) {
        self.name = name
        self.age = age
        self.birthDay = birthDay
    }

    convenience init(age: Int, birthDay: String) {
        self.init(name: "홍길동", age: age, birthDay: birthDay)
    }
}

// convenience init 사용
let person = Person(age: 12, birthDay: "121212")

 

* 참고

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

Comments