본문 바로가기
iOS📱/Swift

[Swift] init 과 convenience init 의 차이

by 텅빈비니 2024. 2. 28.
반응형

안녕하세요🐶

빈지식 채우기의 비니🙋🏻‍♂️ 입니다.

 

오늘은 initconvenience init 의 차이점에 대해 알아보도록 하겠습니다.


1. (Designated) init

Designated init 이란 무엇인가?.?

바로 Swift의 초기화 이니셜라이즈 입니다. 즉 클래스에 선언된 모든 프로퍼티가 초기화 될 수 있게끔 해줘야합니다.

Swift 에서는 Designated 는 생략하고 init 으로만 씁니다 :)

import Foundation

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

 

위와 같이 반드시 프로퍼티가 모두 초기화가 되어야 하는데,

만약 하나라도 빠지게 되면 아래와 같이 오류가 발생합니다.

프로퍼티 빼먹고 초기화 할 경우


2. convenience init

그럼! convenience init 은 무엇인가❗️

(Designated) init 을 보조하는 보조 이니셜라이저 입니다.

.

기존 init 의 파라미터 일부를 기본값으로 설정해서, 

convenience init 내부에서 init 을 호출하여 초기화를 진행할 수 있습니다.


주의할 점❗️

convenience init 을 사용하려면 (Designated) init 이 반드시 선언되어야 한다.


그럼 어떻게 쓰는지 바로 코드로 확인해보도록 하겠습니다.

import Foundation

class ConvenienceInit {
    
    var name: String
    var age: Int
    var gender: String
    
    init(name: String, age: Int, gender: String) {	// 반드시 init 선언이 되어야함
        self.name = name
        self.age = age
        self.gender = gender
    }
    
    convenience init(age: Int, gender: String) {	// name 에 기본값 설정
        self.init(name: "bean", age: age, gender: gender)
    }
}

 

위와 같이 쓸 수 있습니다.

결국은 convenience init 은 저희가 변수를 선언 시 Optional 로 선언할 수 있는데

?? (값) 이렇게 선언하는 것과 비슷하다고 볼 수 있습니다.

변수에 값이 없으면 선언한 초기값으로 설정되기 때문이죠!


감사합니다.


참고

반응형