[ 사전학습 Day 10 ] 은행 계좌 관리 시스템을 구축 해보자

sonny·2024년 9월 24일
1

스파르타코딩클럽

목록 보기
12/13
post-thumbnail

위의 과제 내용을 진행해보았다.

계좌 잔액 (balance) 관리

var balance: Int = 1000 {
    didSet {
        if balance < 0 {
            print("🚨 경고: 잔액은 음수가 될 수 없습니다. 잔액을 0원으로 설정합니다.")
            balance = 0
        } else {
            print("잔액이 \(balance)원으로 변경되었습니다.")
        }
    }
}

var balance: Int = 1000: 잔액을 저장하는 전역 변수 balance를 정의한다. 초기값은 1000원.

didSet: balance 값이 변경될 때마다 실행되는 블록이다.

if balance < 0: 잔액이 음수가 되면 경고 메시지를 출력하고, 잔액을 0으로 설정한다. 이는 계좌의 잔액이 음수가 되는 것을 방지하기 위한 조건이다.

else: 잔액이 음수가 아닐 경우, 새로운 잔액을 출력한다.

짚고 넘어가는 didSet

didSetSwift에서 프로퍼티의 값이 변경된 후에 실행되는 특수한 속성 감시자인데, 주로 프로퍼티의 값이 바뀔 때마다 추가적인 작업을 수행하고 싶을 때 사용된다.
그리고 didSet 내에서 조건문을 사용할 수도 있는데, 잔액이 음수가 되지 않도록 보호하는 코드를 추가할 수 있는 if문 을 넣을 수 있다.

음, 쉽게 말하면 didSet은 변수가 새로 값을 가질 때마다 어떤 행동을 자동으로 하게 해주는 기능인 것이다. 나의 주머니에 사탕이 있고 주머니속의 사탕 갯수가 바뀔 때마다 그 수를 친구에게 알려주는 것처럼, 프로그램에서도 자동으로 어떤 작업을 할 수 있게 해준다.

함수로 잔액을 변경

@MainActor func deposit(amount: Int) {
    balance += amount
}

@MainActor func withdraw(amount: Int) {
    balance -= amount
}

deposit(amount: Int): 주어진 금액을 잔액에 추가하는 함수. balance += amount로 잔액을 증가시킨다.

withdraw(amount: Int): 주어진 금액을 잔액에서 빼는 함수. balance -= amount로 잔액을 감소시킨다.

실행 결과

deposit(amount: 500)   
withdraw(amount: 1000)  
withdraw(amount: 600)   

print("최종 잔액: \(balance)원")

deposit(amount: 500): 500원을 입금한다. 잔액은 1000 + 500 = 1500원이 된다. didSet 블록이 실행되어 "잔액이 1500원으로 변경되었습니다."라는 메시지가 출력된다.

withdraw(amount: 1000): 1000원을 출금한다. 잔액은 1500 - 1000 = 500원이 된다. didSet 블록이 실행되어 "잔액이 500원으로 변경되었습니다."라는 메시지가 출력된다.

withdraw(amount: 600): 600원을 출금하려고 시도한다. 잔액은 500 - 600 = -100원이 된다. 이 경우, didSet 블록의 조건에 의해 잔액이 0으로 설정되고, "🚨 경고: 잔액은 음수가 될 수 없습니다. 잔액을 0원으로 설정합니다."라는 경고 메시지가 출력된다.

print("최종 잔액: \(balance)원"): 마지막으로 현재 잔액을 출력한다. 최종 잔액은 0원이 된다.

입출금 과정에서 잔액이 어떻게 변하는지 출력하고, 잔액이 0 되는 경우에는 경고를 출력하여 안전하게 잔액을 관리하는 걸 공부했다.
잔액 관리에 중에 didSet을 통해 예외적인 상황을 처리하고, 잔액 변경 시에도 변경되는 내용이 프린트 된다. 이렇게 didSet과 if문의 용도성을 공부해봤는데, 혼자서 몇 번 하다보니 바로 바로 코드를 칠 수 있게 된 것 같아서 좋았다. 만족!

profile
iOS 좋아. swift 좋아.

0개의 댓글