티스토리 뷰

반응형

안녕하세요 :) 오늘은 Swift의 이니셜라이저! init과 convenience init의 차이점을 볼거에요.

시작하겠습니다XD



Designated init과 convenience init의 차이




다들 아시다시피, 

Designated init은 Swift의 초기화 이니셜라이저입니다. 

이 init은 클래스의 모든 프로퍼티 초기화 될 수 있도록 해줘야해요.

이름은 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은 무엇이냐?

엄밀히 말하면 convenience init은 "보조 이니셜라이저"에요. 

클래스의 원래 이니셜라이저인 init을 도와주는 역할을 하는 아이죠. 


Designated init의 파라미터 중 일부를 기본값으로 설정해서, 이 convenience init안에서 Designated init을 호출 하여 초기화를 진행할 수 있어요. 

그러니 convenience init을 사용하려면 Designated init이 꼭 먼저 선언되어야겠죠? ㅎㅎ 

swift의 이니셜라이저 규칙이 몇가지가 있는데, 

"convenience init은 같은클래스에서 다른 이니셜라이저를 호출해야한다"라는 규칙이 있어요. 

그럼 convenience 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)

    }

}

 

바로 저렇게 쓸 수 있습니다. 이렇게 해도 오류가 나지않죠 ㅎㅎ 

저 파라미터로 넘겨주지 않은 값은 내가 그냥 임의로 지정하며, 파라미터로 넘어간 것들만 넣어주면 됩니다. 

ㅎㅎ어려운건줄 알았는데 정말 쉬운거였어요!! 후후


오늘도 도움이 되었으면 좋겠어요 💕

반응형