본문 바로가기
Swift

[Swift] 이니셜라이저 (Initializer)

by Sky Titan 2021. 5. 28.
728x90
스위프트 프로그래밍
국내도서
저자 : 야곰
출판 : 한빛미디어 2019.10.01
상세보기

 

 

Initialization — The Swift Programming Language (Swift 5.7)

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 t

docs.swift.org

이니셜라이저 (Initializer)

  • initializer는 특정 type의 새로운 instance를 생성하기 위한 호출되는 메서드이다.


default initializer

  • Swift는 아무 initializer도 구현하지 않은 class나 structure를 위해 default initializer를 제공한다.
  • default initializer는 모든 property를 각각의 default value로 초기화한 상태로 instance를 생성한다.

 

struct, enumeration의 초기화

  • struct의 경우 memberwise initializer라고 해서, 아무 initializer를 생성하지 않은 경우, 모든 member property를 초기화할 수 있는 initializer가 제공된다.
  • enum의 경우 initializer에서 반드시 하나의 case로 self를 초기화 시켜야 한다.
import UIKit

struct B {
    var x: Int, y: Int
}

let b = B(x: 0, y: 3) // struct의 memberwise initializer

enum C {
    case firstCase
    
    init() {
        self = .firstCase //열거형은 반드시 하나의 case가 되어야함.
    }
}

 

초기화 위임 (Delegation of initialization)

  • initializer 내부에 다른 initializer에게 일부 초기화를 위임하게 해서 호출하는 방법
import UIKit

class A {
 
    var name: String
    var age: Int
    
    init(name: String) {
        self.name = name
        self.age = 1
    }
    
    convenience init(name: String, age: Int) {
        self.init(name: name)
        self.age = age
    }
}

 

designated initializer vs convenience intializer

  • designated initializer
    • class의 주요, 메인 initializer라고 할 수 있으며 class에 있는 모든 property들을 초기화한다.
    • 그리고 superclass chain에서 적절한 superclass initializer를 호출하여 초기화 작업을 계속 한다.
    • 클래스에서 최소 한개는 가진다.
  • conveience initializer
    • class의 보조 initializer라고 할 수 있다.
    • class내의 designated initializer를 호출하여 designated intializer의 파라미터들을 default value로 초기화하고 필요하다면 내부의 추가로 초기화 로직을 구현한다.

 

실패 가능한 이니셜라이저 (Failable Initializer)

  • 잘못된 전달인자나 적철하지 못한 값이 전달된 경우엔 인스턴스를 초기화 할 수 없는 경우가 발생
  • 그런 경우엔 실패 가능한 이니셜라이저를 통해 nil을 반환할 수 있다.
import UIKit

class A {
 
    var name: String
    var age: Int
    
    init?(name: String) {
        if name == "Fail Name" {
            return nil
        }
        self.name = name
        self.age = 1
    }
}
728x90

'Swift' 카테고리의 다른 글

[Swift] inout 파라미터  (0) 2021.05.28
[Swift] 제네릭 (Generics)  (0) 2021.05.28
[Swift] 옵셔널 추출 (Optional Unwrapping)  (0) 2021.05.05
[Swift] Selector  (0) 2021.04.22
[Swift] Equatable  (0) 2021.04.21

댓글