인스턴스 생성 및 소멸
우리는 항상 인스턴스를 생성할 때, 프로퍼티에 초기값을 설정해야만 했다. 그러나 이니셜라이저 init를 사용하면 초기화 과정을 직접 구현할 수 있다.
struct Area{
var squareMeter: Double
init() {
squareMeter = 0.0 //이니셜라이저로 인스턴스 프로퍼티에 초기값을 할당함
}
}
let room: Area = Area() //인스턴스 생성
print(room.squareMeter)
//0.0
이니셜라이저로 저장 프로퍼티에 초깃값을 설정하는 방식도 있지만 프로퍼티를 정의할 때 프로퍼티에 기본값을 할당하는 방식을 사용할 수도 있다.
struct Area{
var squareMeter: Double = 0.0 //기본값 할당함
}
let room: Area = Area() //인스턴스 생성
print(room.squareMeter)
//0.0
이니셜 라이저도 매개변수를 가질수 있다. 필요없을 경우에는 와일드카드 식별자를 사용하면 된다.
init(fromPy py: Doubke) //fromPy가 매개변수
초기화 과정에서 값을 초기화하지 않아도 되는, 즉 인스턴스가 사용되는 동안에 값을 꼭 갖지 않아도 되는 저장 프로퍼티가 있다면 해당 프로퍼티를 옵셔널로 선언할 수 있다. 할당하지않으면 nil로 할당된다.
class Person{
var name: String
var age: Int?
init(name: String) { //age는 할당하지 않음. nil로 할당됨.
self.name = name
}
}
let yagom: Person = Person(name: "KIM")
이니셜라이저를 통해 인스턴스를 초기화할 수 없는 여러가지 상황이 있다. 적절치 못한 값이 전달되었거나 잘못된 값이 전달되었을때이다. 이런 실패 가능성을 염두에 두고 이니셜라이저를 지정하기도 하는데, 이것을 실패 가능한 이니셜라이저(init?)라고 한다.
클로저를 사용하기에 13장 이후에 다시 기입
디이니셜라이저는 이니셜라이저와 반대 역할을 한다. 메모리에서 해제되기 직전 클래스 인스턴스와 관련하여 정리 작업을 구현한다. (클래스에서만 사용 가능)
class SomeClass {
deinit {
print("ABC")
}
}
var instance: SomeClass? = SomeClass()
instance = nil
// ABC