Swift에서는 super class에서 상속받은 프로퍼티들을 포함하여, 모든 저장 프로퍼티가 초기 값을 가질 수 있도록 Class 유형에 대해 두 가지 종류의 초기화를 정의한다. 그 두가지가 바로 흔히 init으로 사용하는 기본 Designated init, 그리고 Convenience init.
init 에서는 모든 저장 프로퍼티가 반드시 초기화되어야하는데, Convenience init은 init의 파라미터 중 일부를 임의의 기본값으로 설정해서 오류가 나지 않도록 도와주는 보조 이니셜라이저.
* init의 보조이기 때문에 미리 선언한 init을 활용해서 사용해야 한다.
convenience init 딱히 필요성을 잘 모르겠어서 왜 쓰나 싶었다.
custom collectionView cell 만들때 필수로 추가해줘야하는 override init / required init 말고 내가 init을 직접 만들어서 사용해야 할 일이 딱히 없없다.
class 생성할 때 모든 프로퍼티를 init을 통해 초기화해준다고 하는데 사실 그것도 그냥 보통 처음에 프로퍼티 선언할때 초기화까지 같이 해줘서 딱히 init() 쓸 이유가 없었음. 옵셔널로 프로퍼티 설정해줘도 되는데 굳이 convenience init으로 임의 초기화 해줘야할 이유가 있을까..?
앞으로도 딱히 쓸 일이 있을지는 모르겠지만 그냥 기초문법이니 참고용으로만 알아두겠다.
혹여나 추후 쓸 일이 생기게 된다면 활용 예시를 추가해보겠음.
Initialization
Initialization is the process of preparing an instance of a class, structure, or enumeration for use. This process involves setting an initial value for each stored property on that instance and performing any other setup or initialization that’s required before the new instance is ready for use.
초기화는 클래스, 구조체, 열거형 인스턴스를 사용하기 위해 준비 작업을 하는 단계이다. 저장 프로퍼티들의 초기값을 설정하고, 새 인스턴스를 사용하기 전에 필요한 다른 설정 또는 초기화를 수행하는 작업을 한다.
Initializers
set the initial value of a stored property from within an initializer
struct Fahrenheit {
var temperature: Double
init() {
temperature = 32.0
}
}
Default property values
프로퍼티의 선언과 동시에 값을 할당하면 그 값을 초기 값으로 사용할 수 있다.
If a property always takes the same initial value, provide a default value rather than setting a value within an initializer.
struct Fahrenheit {
var temperature = 32.0
}
Customizing Initialization Parameters
다음과 같이 파라미터를 넣어 초기화를 해줄 수도 있다.
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
Optional Property Types
초기화 시에 프로퍼티의 초기 값이 정해지지 않았거나, 나중에 값이 없어도 로직 상에 문제가 없을 경우, 프로퍼티를 옵셔널 타입으로 선언해 사용할 수도 있다. 이 경우 옵셔널 프로퍼티는 자동으로 nil 값으로 초기화된다.
struct Fahrenheit {
var temperature: Double?
}
Designated Initializers and Convenience Initializers
Swift에서는 super class에서 상속받은 프로퍼티들을 포함하여, 모든 저장 프로퍼티가 초기 값을 가질 수 있도록 Class 유형에 대해 두 가지 종류의 초기화를 정의한다. 그 두가지가 바로 Designated init (줄여서 init) 그리고 Convenience init.
init 에서는 모든 저장 프로퍼티가 반드시 초기화되어야함.
Convenience init 은 일부 프로퍼티 값이 없더라도 에러가 뜨지 않도록 임으로 값을 지정해주는 보조 이니셜라이저
*init의 보조이기 때문에 미리 선언한 init을 활용해서 사용해야 한다.
class Student {
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(name: String, age: Int) {
self.init(name: name, age: age, gender: "none")
}
}
참고 : https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift] Any와 AnyObject 비교 및 장단점 (0) | 2022.12.10 |
---|---|
[Swift] Type Casting 타입 캐스팅 (0) | 2022.12.10 |
[Swift] Copy On Write 동작 방식 (0) | 2022.12.07 |
[Swift] Class의 성능을 향상시킬 수 있는 방법 (0) | 2022.12.02 |
[Swift] Optional 옵셔널이란? (0) | 2022.12.01 |