디이니셜라이저는 초기자(Initializer)와 반대로 클래스 인스턴스가 소멸되기 직전에 호출됩니다. 초기자는 선언 키워드로 init를 사용하는데 디이니셜라이저는 선언을 위해 deinit키워드를 사용합니다. 디이니셜라이저는 오직 클래스 타입에서만 사용 가능합니다.
초기화 해지의 동작 (How Deinitilization Works)
/* 일반적으로 Swift가 자원의 해제를 자동으로 알아서 해주는데,
열었던 파일을 사용이 끝나고 닫는 것 같이 사용자가 자원 해지를 위해 수동으로 작업 해야하는 경우도 있습니다.
이럴 때 사용하는 것이 디이니셜라이저입니다.디이니셜라이저는 클래스당 오직 하나만 선언할 수 있고
파라미터를 받을 수 없습니다. 디이니셜라이저의 기본적인 선언 형태는 다음과 같습니다. */
deinit {
// perform the deinitialization
}
디이니셜라이저의 사용 (Deinitializers in Action)
class Bank {
static var coinsInBank = 10_000
static func distribute(coins numberOfCoinsRequested: Int) -> Int {
let numberOfCoinsToVend = min(numberOfCoinsRequested, coinsInBank)
coinsInBank -= numberOfCoinsToVend
return numberOfCoinsToVend
}
static func receive(coins: Int) {
coinsInBank += coins
}
}
class Player {
var coinsInPurse: Int
init(coins: Int) {
coinsInPurse = Bank.distribute(coins: coins)
}
func win(coins: Int) {
coinsInPurse += Bank.distribute(coins: coins)
}
deinit {
Bank.receive(coins: coinsInPurse)
}
}
var playerOne: Player? = Player(coins: 100)
print("A new player has joined the game with \(playerOne!.coinsInPurse) coins")
// Prints "A new player has joined the game with 100 coins"
// 사용자는 100 코인을 갖고 시작합니다.
print("There are now \(Bank.coinsInBank) coins left in the bank")
// Prints "There are now 9900 coins left in the bank"
// 현 시점에 은행은 9900의 코인을 소유하고 있습니다.
출처 https://jusung.gitbook.io/the-swift-language-guide/language-guide/15-deinitialization
'Swift Language' 카테고리의 다른 글
Swift Language - 16 - 에러 처리 (Error Handling) (0) | 2023.02.02 |
---|---|
Swift Language - 15 - 옵셔널 체이닝 (Optional Chaining) (0) | 2023.02.02 |
Swift Language - 13 - 초기화 (Initialization) (1) | 2023.02.02 |
Swift Language - 12 - 상속 (Inheritance) (0) | 2023.02.01 |
Swift Language - 11 - 서브스크립트 (Subscripts) (0) | 2023.02.01 |