You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
디이니셜라이저는 클래스 인스턴스가 소멸되기 전에 즉시 호출된다
deinit 키워드를 통해 디이니셜라이저를 사용 가능
디이니셜라이저는 클래스 타입에서만 사용 가능
디이니셜라이저의 작동 방식
Swift는 인스턴스가 더 이상 사용되지 않으면 공간을 비움으로써 자동으로 소멸시킨다
Swift는 자동 참조 카운팅(ARC, Automatic Reference Counting)을 통해 인스턴스의 메모리를 관리
일반적으로 인스턴스가 소멸될 때 수동으로 청소를 할 필요가 없다
하지만, 리소스를 사용하고 있을 때, 추가적인 청소 작업이 필요할 때가 있다
ex. 파일을 열고 데이터를 쓰기위한 커스텀 클래스를 만들면, 클래스 인스턴스가 소멸되기 전에 반드시 파일을 닫아야한다
클래스는 최대 하나의 디이니셜라이저를 가질 수 있다
디이니셜라이저는 매개 변수를 갖지 않기에 소괄호를 작성하지 않는다
deinit{
// perform the deinitialization
}
디이니셜라이저는 인스턴스가 소멸되기 직전에 자동으로 호출된다
수동으로 직접 호출할 수는 없다
자식 클래스가 상속한 부모 클래스의 디이니셜라이저는 자식 클래스의 디이니셜라이저 구현의 끝에서 자동으로 호출
부모 클래스의 디이셜라이저는 자식 클래스에서 디이니셜라이저를 선언하지 않아도 항상 실행
디이니셜라이저가 호출된 이후에야 인스턴스가 소멸되기 때문에
디이니셜라이저는 인스턴스의 모든 프로퍼티에 접근할 수 있고,
프로퍼티에 기반하여 행동을 수정할 수도 있다
디이니셜라이저의 사용
Bank 클래스는 은행 coinsInBank 프로퍼티로 함께 현재 보유하고 있는 코인의 수를 추적하고 총 보유 코인의 양을 10000으로 한정
또한, 코인의 유통과 수집을 처리하기 위해 distribute(coins:) 와 receive(coins:)의 두 가지 매서드를 제공
Bank는 오직 하나만 존재할 수 있기 때문에, 타입 프로퍼티와 타입 메소드로 내부를 구현
Player 클래스는 게임에서 플레이어를 묘사
각 플레이어는 언제든지 coinsInPurse에 일정 수의 코인을 보관 가능
각 초기화 시점에서 그들의 지갑에 저장된 코인의 양을 소유하게 되고, 플레이어의 소유의 코인으로 표현
또한, win(coin:) 메서드와 디이니셜라이저를 제공
// Bank와 Player 두 가지 클래스를 정의
// Bank 클래스는 통화를 관리하며, 10000 코인 이상 보유할 수 없다
classBank{staticvarcoinsInBank=10_000
// The distribute(coins:) 매서드는 코인이 유통되기 전에 은행에 충분한지 확인
// 코인이 충분하지 않으면 은행은 요청된 숫자보다 작은 숫자를 반환 - 은행에 코인이 남아 있지 않으면 0을 반환
// 제공된 실제 코인 수를 나타내는 정수 값을 반환
staticfunc distribute(coins numberOfCoinsRequested:Int)->Int{letnumberOfCoinsToVend=min(numberOfCoinsRequested, coinsInBank)
coinsInBank -= numberOfCoinsToVend
return numberOfCoinsToVend
}
// The receive(coins:) 매서드는 단순히 받은 코인 수를 은행의 코인 스토어에 다시 추가
staticfunc receive(coins:Int){
coinsInBank += coins
}}
// Player 클래스는 게임에서의 플레이어를 묘사
// 사용 가능한 코인이 충분하지 않은 경우 플레이어 인스턴스는 해당 개수보다 적은 개수의 코인을 받을 수 있다
// 은행에서 일정 수의 코인을 검색하여 플레이어의 지갑에 추가하는 win(coin:) 메서드를 정의
// 디이니셜라이저는 플레이어가 가진 모든 코인을 은행에 돌려 준다
classPlayer{varcoinsInPurse:Intinit(coins:Int){
coinsInPurse =Bank.distribute(coins: coins)}func win(coins:Int){
coinsInPurse +=Bank.distribute(coins: coins)}deinit{Bank.receive(coins: coinsInPurse)}}
// 100개의 코인을 가진 플레이어 인스턴스 생성 playerOne에 할당
// 플레이어는 언제든지 게임을 떠날 수 있기 때문에 옵셔널 변수가 여기에 사용
// 현재 게임에 플레이어가 있는지 여부를 추적 가능, nil일 경우 게임을 떠난 것
varplayerOne: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"
print("There are now \(Bank.coinsInBank) coins left in the bank")
// Prints "There are now 9900 coins left in the bank"
// 옵셔널에 접근하기 위한 강제해제
// playerOne이 2000 코인을 획득
playerOne!.win(coins:2_000)print("PlayerOne won 2000 coins & now has \(playerOne!.coinsInPurse) coins")
// Prints "PlayerOne won 2000 coins & now has 2100 coins"
print("The bank now only has \(Bank.coinsInBank) coins left")
// Prints "The bank now only has 7900 coins left"
// 플레이어가 게임을 떠나 playerOne에 nil을 할당하면, Player 인스턴스에 대한 참조는 끊어진다
// 메모리에서 비워져 소멸되기 전에 디이니셜라이저가 호출되어 은행에 돈을 돌려 주게 된다
playerOne =nilprint("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"
The text was updated successfully, but these errors were encountered:
디이니셜라이저는 클래스 인스턴스가 소멸되기 전에 즉시 호출된다
deinit 키워드를 통해 디이니셜라이저를 사용 가능
디이니셜라이저는 클래스 타입에서만 사용 가능
디이니셜라이저의 작동 방식
Swift는 인스턴스가 더 이상 사용되지 않으면 공간을 비움으로써 자동으로 소멸시킨다
Swift는 자동 참조 카운팅(ARC, Automatic Reference Counting)을 통해 인스턴스의 메모리를 관리
일반적으로 인스턴스가 소멸될 때 수동으로 청소를 할 필요가 없다
하지만, 리소스를 사용하고 있을 때, 추가적인 청소 작업이 필요할 때가 있다
ex. 파일을 열고 데이터를 쓰기위한 커스텀 클래스를 만들면, 클래스 인스턴스가 소멸되기 전에 반드시 파일을 닫아야한다
클래스는 최대 하나의 디이니셜라이저를 가질 수 있다
디이니셜라이저는 매개 변수를 갖지 않기에 소괄호를 작성하지 않는다
디이니셜라이저는 인스턴스가 소멸되기 직전에 자동으로 호출된다
수동으로 직접 호출할 수는 없다
자식 클래스가 상속한 부모 클래스의 디이니셜라이저는 자식 클래스의 디이니셜라이저 구현의 끝에서 자동으로 호출
부모 클래스의 디이셜라이저는 자식 클래스에서 디이니셜라이저를 선언하지 않아도 항상 실행
디이니셜라이저가 호출된 이후에야 인스턴스가 소멸되기 때문에
디이니셜라이저는 인스턴스의 모든 프로퍼티에 접근할 수 있고,
프로퍼티에 기반하여 행동을 수정할 수도 있다
디이니셜라이저의 사용
Bank 클래스는 은행 coinsInBank 프로퍼티로 함께 현재 보유하고 있는 코인의 수를 추적하고 총 보유 코인의 양을 10000으로 한정
또한, 코인의 유통과 수집을 처리하기 위해 distribute(coins:) 와 receive(coins:)의 두 가지 매서드를 제공
Bank는 오직 하나만 존재할 수 있기 때문에, 타입 프로퍼티와 타입 메소드로 내부를 구현
Player 클래스는 게임에서 플레이어를 묘사
각 플레이어는 언제든지 coinsInPurse에 일정 수의 코인을 보관 가능
각 초기화 시점에서 그들의 지갑에 저장된 코인의 양을 소유하게 되고, 플레이어의 소유의 코인으로 표현
또한, win(coin:) 메서드와 디이니셜라이저를 제공
The text was updated successfully, but these errors were encountered: