맛동산이

Swift) Convenience init, Designated init을 사용해서 초기화하기 본문

앱/SwiftUI

Swift) Convenience init, Designated init을 사용해서 초기화하기

진ddang 2023. 8. 28. 15:11

Designated init()이란

지정 이니셜라이저이다.

우리가 class를 사용하면 모든 프로퍼티에 초기값을 할당해줘야 하고 초기화 할수있게 해준다.

class SomeClass { 	var number: Int 	var name: String 	init(number: Int, name: String) { 		self.number = number 		self.name = name 	} } 

하지만 이때 단 하나의 프로퍼티라도 초기화가 되지 않으면 에러를 발생시킨다.

Untitled.png

convenience init()

💡 convenience init은 왜쓰는가?

바로 init을 할때, 모든 프로퍼티에 초기값을 일일히 넣어주는 작업을 하지 않고, 초기값을 자동으로 넣어주기 위해서 사용한다.

따라서 convenience init은 기본적으로 designated init을 호출한다.

왜냐? designated init을 호출한 거 중에서 몇개의 프로퍼티에 초기값을 넣어주는 작업이기 때문이다.

class SomeClass {     var number: Int     var name: String     var value: Int     init(value: Int, number: Int, name: String) {         self.number = number         self.name = name         self.value = value     }     convenience init(number: Int, name: String) {         self.init(value: 12, number: number, name: name)     } } 

이후 init을 해보면 다음과 같이 나온다.

Untitled.png

기본 init과 value에 초기값으로 12가 들어가있는 init으로 두개를 사용할수 있게 된다.

기본적으로 초기값을 주는 경우랑은 뭐가 다른가요???

class AnotherClass {     var number: Int     var name: String     var value: Int = 12     init(number: Int, name: String) {         self.number = number         self.name = name     } } 

조금더 명시적으로 인스턴스를 만들때 어떤값들을 초기화 할수있는지, 알려줄수 있다는 장점이 있다는것 뿐?

반응형