본문 바로가기

iOS

[iOS] [Swift] Convenince init

convenience init

 

Swift에서 이용되는 init은 다른 언어에서의 init과 같이 동일하게 생성자 역할을 하며 designated initconvenience init으로 나뉘어진다.

 

우리가 일반적으로 쓰는 init()designated init이다.

 

designated init은 반드시 1개는 있어야 하고, convenience init은 말 그대로 보다 유연하고 간편하게 쓰려고 만드는 생성자다.

 

class Person {
    var name: String
    var age: Int
    var height: Int
    var weight: Int

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

 

위 예시가 우리가 일반적으로 사용하던 designated init이다.

 

이 init은 클래스 내 모든 프로퍼티를 의무적으로 초기화 시켜줘야 한다.

 

만일, 프로퍼티 중 단 한가지라도 초기화시켜주지 않으면 에러를 뿜는다..

 

image


(요로코롬..)

 

그렇다면 convenience init은 어떤 기능을 제공하는지 살펴보자!

 

convenience initdesignated init을 보조하는 보조 생성자 역할을 한다.

 

designated init의 파라미터 중 일부를 기본값으로 가지도록 하여 convenience init 내부에서 designated init을 호출하도록 한다.

 

즉, convenience init을 사용하기 위해서는 반드시 designated init 이 선언되어 있어야한다.

 

class Person {
    var name: String
    var age: Int
    var height: Int
    var weight: Int

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

    convenience init(age: Int, height: Int, weight: Int) {
        self.init(name: "기본값", age: age, height: height, weight: weight)
    }
}

 

이와 같이 기존의 designated init에서 name 프로퍼티를 기본값으로 갖도록 하는 convenience init을 만들어서 사용할 수 있다.

 

image

 

이와 같이 사용하면 당연히 파라미터로 넘겨주지 않은 데이터는 기본값을 갖는 인스턴스로 생성된다.

 

image

// 아무개
// 기본값

 

결과적으로 convenience init을 사용하면 designated innit을 보조하는 역할로서 이를 기반으로 하여 재사용성에 이점을 가져갈 수 있다.

'iOS' 카테고리의 다른 글

[iOS] [Swift] Protocol Oriented Programming  (0) 2020.10.16
[iOS] RxSwift를 이용한 Login 기능 구현  (1) 2020.10.07
[iOS] RxSwift 시작하기  (0) 2020.09.29
[iOS] KingFisher 소개  (1) 2020.09.22
[iOS] [Swift] RxSwift 공부 및 정리  (0) 2020.09.16