출금 메서드
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 21번째.
챌린지
쉬움디지털 은행이 성장하고 있습니다! 이제 계좌에서 입금을 받을 수 있지만, 실제 은행은 고객이 돈을 인출할 수 있도록 해야 합니다. :withdraw(amount) 메서드를 추가하되, 중요한 안전 검사를 적용해 보겠습니다.
입금과 달리 인출은 실패할 수 있습니다. 고객이 보유한 금액보다 더 많은 돈을 인출하려고 하면 은행은 이를 허용해서는 안 됩니다. withdraw 메서드는 금액을 차감하기 전에 충분한 자금이 있는지 확인해야 합니다.
계속해서 다음 두 파일을 작업하게 됩니다.
Account.lua: 기존 Account 클래스에:withdraw(amount)메서드를 추가합니다. 계좌에 잔액이 충분하면 금액을 차감하고true를 return합니다. 자금이 충분하지 않으면Insufficient funds를 print하고 잔액을 변경하지 않은 채false를 return합니다.main.lua: 계좌를 생성하고, 자금을 마련하기 위해 입금한 다음, 여러 번의 인출을 시도하여 성공한 거래와 실패한 거래를 모두 확인합니다.
네 개의 입력을 받습니다.
- initial 입금 금액
- first 인출 금액
- second 인출 금액
- third 인출 금액
main 파일에서 계좌를 생성하고 initial 금액을 입금한 다음, 각 인출을 순서대로 시도합니다. 각 인출 시도 후 현재 잔액을 새 줄에 print합니다. 인출에 실패하면 잔액을 print하기 전에 Insufficient funds도 출력된다는 점을 기억하세요.
예를 들어 입력이 100, 30, 50, 40이라면 출력은 다음과 같아야 합니다.
70
20
Insufficient funds
20입금 후 계좌는 100으로 시작합니다. 첫 번째 30 인출은 성공하고(잔액: 70), 두 번째 50 인출도 성공하지만(잔액: 20), 세 번째 40 인출은 20만 남아 있기 때문에 실패하므로 잔액은 20으로 유지됩니다.
직접 해보기
-- Account 모듈 불러오기
local Account = require('Account')
-- 네 개의 입력 읽기
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- 단일 계정 생성
local account = Account:new()
-- 초기 금액 입금
account:deposit(initialDeposit)
-- 첫 번째 출금 시도 및 잔액 출력
-- TODO: 여기서 account:withdraw(withdrawal1) 호출
print(account.balance)
-- 두 번째 출금 시도 및 잔액 출력
-- TODO: 여기서 account:withdraw(withdrawal2) 호출
print(account.balance)
-- 세 번째 출금 시도 및 잔액 출력
-- TODO: 여기서 account:withdraw(withdrawal3) 호출
print(account.balance)
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러