GGURUPiOS
Swift 공식 문서 정리 - (15) Deinitialization 본문
Deinitialization (초기화 해지)
클래스 인스턴스가 할당 해제되기 직전에 호출됨.(클래스 인스턴스만)
init 과 비슷하게 선언하며, deinit 이라는 키워드를 작성함
초기화 해제 작동 방식
스위프트는 더 이상 필요하지 않은 인스턴스를 자동으로 할당 해제하여 리소스를 확보 함 (ARC)
일반적으로는 수동 정리가 필요가 없음.
초기화 해제 실행
다음 예제를 보자
사용자는 게임을 하는데 일정 코인을 은행으로부터 받고, 게임에서 이길 때마다 은행에서 코인을 받아 사용자의 지갑에 저장
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)
}
}
게임이 끝나면 은행에서 받았던 돈을 다시 은행에 돌려주기 위해
위 코드에서 deinit안에 Bank.receive(coins: ocinsInPurse) 코드를 넣어 사용했던 돈 반환
게임 시작
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의 코인을 소유하고 있습니다.
게임에서 이긴 상황
playerOne!.win(coins: 2_000)
print("PlayerOne won 2000 coins & now has \\(playerOne!.coinsInPurse) coins")
// Prints "PlayerOne won 2000 coins & now has 2100 coins"
// 사용자가 게임에 이겨 2000코인을 받아 처음에 갖고 있던 100 코인과 더불어 현재 총 2100 코인을 소유하게 됩니다.
print("The bank now only has \\(Bank.coinsInBank) coins left")
// Prints "The bank now only has 7900 coins left"
// 사용자에게 2100 코인을 나눠준 은행에는 현재 7900 코인이 남았습니다.
게임이 끝난 상황
playerOne = nil
print("PlayerOne has left the game")
// Prints "PlayerOne has left the game"
// 사용자가 게임에서 나갔습니다.
print("The bank now has \\(Bank.coinsInBank) coins")
// Prints "The bank now has 10000 coins"
위 코드에서 playerOne = nil 코드가 더 이상 이 인스턴스를 사용하지 않는다는 것. 그래서 앞의 deinit 이 실행돼 그곳에 선언한 지갑에 있는 돈을 은행에 반납하는 코드가 실행됨
은행은 다시 처음에 갖고 있던 10000코인을 갖게 됨
'Swift > 공식문서 정리 ( 문법 )' 카테고리의 다른 글
Swift 공식 문서 정리 - (17) Error Handling (0) | 2023.04.28 |
---|---|
Swift 공식 문서 정리 - (16) Optional Chaining (0) | 2023.04.28 |
Swift 공식 문서 정리 - (14) Initialization (0) | 2023.04.28 |
Swift 공식 문서 정리 - (12) Subscripts (0) | 2023.04.28 |
Swift 공식 문서 정리 - (11) Methods (0) | 2023.04.27 |