μλ νμΈμ, κ°μμ λλ€. μ§λλ² 4μΌκ° 곡λΆνλ μμ±μμ μ΄μ΄μ μλ©Έμμ λν΄μ 곡λΆν λ΄μ©μ μ¬λ €λ΄ λλ€. 곡μλ¬Έμ.. κΈΈμ΄μ μ΄λ €μγ μ΄μ΄μ΄
Swift Document chap.15 Deinitialization λ°λ‘κ°κΈ°
Deinitialization (μλ©Έμ)
λμ΄λμ λΌμ΄μ λ μμ±μ(Initializer)μλ λ°λλ‘ ν΄λμ€ μΈμ€ν΄μ€κ° μλ©ΈλκΈ° μ§μ μ νΈμΆλλ€. μμ±μλ μ μΈ ν€μλλ‘ initμ μ¬μ©νλλ° λμ΄λμ λΌμ΄μ¦λ μ μΈμ μν΄ deinitμ μ¬μ©νλ€. λμ΄λμ λΌμ΄μ λ μ€μ§ ν΄λμ€ νμ μμλ§ μ¬μ© κ°λ₯νλ€.
How Deinitialization Works
μΌλ°μ μΌλ‘ Swiftκ° μμμ ν΄μ λ₯Ό μλμΌλ‘ μμμ ν΄μ£Όλλ°, μ΄μλ νμΌμ μ¬μ©μ΄ λλκ³ λ«λκ² κ°μ΄ μ¬μ©μκ° μμ ν΄μ§λ₯Ό μν΄ μλμΌλ‘ ν΄μΌνλ κ²½μ°λ μλ€. μ΄λ΄ λ μ¬μ©νλ κ²μ΄ λμ΄λμ λΌμ΄μ μ΄λ€. λμ΄λμ λΌμ΄μ λ ν΄λμ€ λΉ μ€μ§ νλλ§ μ μΈν μ μκ³ , νλΌλ―Έν°λ₯Ό λ°μ μ μλ€.
λμ΄λμ λΌμ΄μ μ κΈ°λ³Έμ μΈ μ μΈμ ννλ μλμ κ°λ€.
deinit {
// perform the deinitialization
}
λμ΄λμ λΌμ΄μ λ μλμΌλ‘ νΈμΆλκ³ , μλμΌλ‘ νΈμΆν μ μλ€. superclassμ λμ΄λμ λΌμ΄μ λ subclass μμ λμ΄λμ λΌμ΄μ λ₯Ό μ μΈνμ§ μμλ μλμΌλ‘ νΈμΆλλ€.
Deinitializer μ μ¬μ©
λμ΄λμ λΌμ΄μ μ λμμ νμΈν΄λ³΄κΈ° μν΄ μμ λ₯Ό λ§λ€μ΄λ³΄μ.
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
}
}
- μν ν΄λμ€λ₯Ό νλ μ μΈ κ·Έ μμ
- μνμ΄ μμ ν μ½μΈμ coinsInBank
- μ½μΈμ λ°°ν¬νλ distribute λ©μλ
- νμ¬ μνμ λ¨μ μ½μΈμλ₯Ό νμΈν΄ μμ²ν μ½μΈμμ λΉκ΅ν΄ λ μμ κ²μ λ°ννλ€. λ§μ½ μνμ λ¨μ μ½μΈμ΄ 0μ΄λΌλ©΄, μμ²ν μ½μΈ λμ 0μ λ°ννλ€.
- μ½μΈμ λ°λ recieve λ©μλλ₯Ό μ μΈνλ€.
- μ½μΈμ λ°μ μνμ μΆκ°νλ λ©μλμ΄λ€. μ΄ μ½μΈμ νμ©νμ¬ κ²μμ μ§ννλ€κ³ κ°μ νλ©΄, μ¬μ©μλ κ²μμ νλλ° μ²μμ μΌμ μ½μΈμ μνμΌλ‘ λΆν° λ°κ³ μμνκ³ , μ΄κΈΈ λλ§λ€ μνμμ μ½μΈμ λ°μ μ¬μ©μμ μ§κ°μ μ μ₯νλ€.
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: coinsInPurse) μ½λλ₯Ό λ£μ΄ μ¬μ©νλ λμ λͺ¨λ μνμ λ€μ λ°ννλλ‘ νλ€.
β· μΆκ°μ€λͺ
- Player ν΄λμ€λ coinsInPurse νλ‘νΌν°μ νμ¬ νλ μ΄μ΄κ° κ°μ§ μ½μΈ μλ₯Ό μ μ₯νλ€. λͺ¨λ νλ μ΄μ΄κ° κ°μ§ μ½μΈμ μκ° 10000κ°κ° λμ΄μΌνκΈ° λλ¬Έμ λ§μ½ νλ μ΄μ΄ μΈμ€ν΄μ€λ₯Ό ν λΉ ν΄μ νλ€λ©΄, ν΄λΉ νλ μ΄μ΄μ μ½μΈμ λ€μ Bank μΈμ€ν΄μ€λ‘ λλ €μ€μΌνλ€. μ΄λ¬ν λΆλΆμ Player ν΄λμ€μ μλ©Έμλ‘ κ΅¬νν μ½λμ΄λ€.
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μ μ½μΈμ μμ νκ³ μμ΅λλ€.
100κ°μ μ½μΈμ κ°μ§ νλ μ΄μ΄1 μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ 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 μ½μΈμ΄ λ¨μμ΅λλ€.
νλ μ΄μ΄1μ΄ κ²μμμ μ΄κ²¨μ 2000 μ½μΈμ νλνλ€. νλ μ΄μ΄ 1 μ§κ°μλ 2100 μ½μΈμ΄, BankμΈμ€ν΄μ€μλ 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"
μ΄λ νλ μ΄μ΄1μ nilμ μ μ₯νλ©΄, λ©λͺ¨λ¦¬ ν λΉμ΄ ν΄μ λλλ° μ΄ λ Playerν΄λμ€μ μλ©Έμκ° μ€νλμ΄ νλ μ΄μ΄1μ μ½μΈμ Bankμ λ°ννλ€. λ°λΌμ λ€μ Bankκ° μμ ν μ½μΈμ 10000μ΄ λλ€.