반응형
Overview
- 초기화는 사용할 class, struct, enum의 인스턴스를 준비하는 절차
- 인스턴스의 각 stored property 에 대한 초기값을 설정
- 새 인스턴스를 사용할 준비가 되기 전에 필요한 다른 설정 또는 초기화를 수행하는 작업
- 인스턴스가 할당 해제되기 전에 모든 사용자 지정 정리를 수행하는 deinitializer 를 구현할 수 있음
Setting Initial Values for Stored Properties
- 저장된 속성 (stored property의 초기값 설정)
- 클래스와 구조체는 해당 타입의 인스턴스가 생성될 때까지 저장된 모든 속성에 초기값을 설정해줘야 한다.
- 저장된 속성의 초기값이 결정되지 않은 상태로 남겨둘 수 없다.
- 생성자 내에서 stored property의 초기값을 설정하거나 property의 선언부에 기본값을 할당하여 설정할 수 있다.
Initializer
- 생성자는 특정 타입의 새 인스턴스를 생성하기위해 호출된다.
- 가장 간단한 생성자는 매개 변수가 없는 인스턴스 메서드와 같다.
- init 키워드를 통해 작성할 수 있다.
init() { // perform some initialization here }
- 다음은 화씨 단위로 표현된 온도를 저장하기 위해 호출되는 struct 를 정의한다.
- Fahrenheit struct 는 Double 형의 temperature 프로퍼티를 갖고 있다.
struct Fahrenheit {
var temperature: Double
init() {
temperature = 32.0
}
}
var f = Fahrenheit()
print("The default temperature is \(f.temperature) Fahrenheit")
- 이 struct는 파라미터를 받지 않는 하나의 생성자를 선언하고 있으며
- temperature에 화씨 온도에서 물의 어는 점인 32.0 을 저장하고 있다.
Default Property Values
- 위와 같은 방식으로 생성자 내부에서 stored property에 초기값을 설정할 수 있다.
- 대안으로 프로퍼티를 선언할 때 프로퍼티의 기본값을 설정할 수 있다.
Note
프로퍼티가 항상 동일한 초기값을 가즌다면 생성자 내부에서 값을 설정해주기 보다는 기본 속성값으로 제공하세요. 결과는 동일하지만 기본값은 프로퍼티의 생성과 선언을 더 밀접하게 이어줍니다. 생성자를 더 짧고 명확하게 만들어주며 기본값으로 부터 프로퍼티의 타입을 쉽게 추론할 수 있도록 도와줍니다. 기본값은 또한 기본 생성자와 생성자 상속에서도 이점을 가져다주며 추후의 챕터에서 다루게 됩니다.
- 위에서 선언한 화씨 구조체를 기본값 방식을 사용하여 간단한 형태로 적을 수 있다.
- temperature 프로퍼티가 선언되는 시점에서 기본값을 제공하는 방식이다.
struct Fahrenheit {
var temperature = 32.0
}
Customizing Initialization
- 사용자 정의 방식의 초기화
- input 파라미터및 optional 타입을 사용하거나 초기화 도중 상수 프로퍼티를 할당하여 생성 과정을 customize 할 수 있다.
초기화 매개변수
- 생성자를 정의하는 부분으로 생정자의 파파미터를 제공할 수 있다.
- 생성 절차를 사용자화하기 위해 타입과 값의 이름을 정의하는 것이다.
- 생성자 파라미터는 함수와 메서드 파라미터와 동일한 능력을 갖고 있다.
- 다음은 Celsius로 불리는 구조체를 선언하는 예시이다.
- Celsius 구조체는 서로 다른 파라미터를 갖는 두가지의 사용자 정의 생성자가 구현되어있다.
- 두 생성자의 차이는 서로 다른 온도 단위를 사용하여 새로운 인스턴스를 생성한다는 점이다.
struct Celsius {
var temperatureInCelsius: Double
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
매개변수 이름 및 인수 라벨
인수 라벨이 없는 초기화 매개변수
Optional Type
초기화 중 상수 속성 할당
Default Initializers
- 기본 생성자
Initializer Delegation for Value Types
- 값 타입에 대한 초기화 위임
Class Inheritance and Initialization
- 클래스 상속 및 생성자
Failable Initializers
- 실패할 수 있는 생성자
Required Initializers
- 필수 생성자
Setting a Default Property Value with a Closure or Function
- 클로저 또는 함수로 기본 속성값 설정하기
반응형
' Apple > Swift Programming Language' 카테고리의 다른 글
[Swift] 공식문서 씹어먹기: Property - Computed Property (0) | 2021.10.22 |
---|---|
[Swift] 공식문서 씹어먹기: Collection Type - Dictionary (0) | 2021.10.22 |
[Swift] 공식문서 씹어먹기: Strings and Characters (0) | 2021.09.23 |
[Swift] 공식문서 씹어먹기: Basic Operators (0) | 2021.09.21 |
[Swift] 공식문서 씹어먹기: The Basics (0) | 2021.09.19 |