 Apple Lover Developer & Artist

영속적인 디자인에 현대의 공감을 채워넣는 공방입니다

 Apple/Swift Programming Language

[Swift] 공식문서 씹어먹기: Initialization

singularis7 2021. 10. 18. 17:12
반응형

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

  • 클로저 또는 함수로 기본 속성값 설정하기

 

 

 

 

반응형