Menu
Coddy logo textTech

출금 메서드

Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 21번째.

challenge icon

챌린지

쉬움

디지털 은행이 성장하고 있습니다! 이제 계좌에서 입금을 받을 수 있지만, 실제 은행은 고객이 돈을 인출할 수 있도록 해야 합니다. :withdraw(amount) 메서드를 추가하되, 중요한 안전 검사를 적용해 보겠습니다.

입금과 달리 인출은 실패할 수 있습니다. 고객이 보유한 금액보다 더 많은 돈을 인출하려고 하면 은행은 이를 허용해서는 안 됩니다. withdraw 메서드는 금액을 차감하기 전에 충분한 자금이 있는지 확인해야 합니다.

계속해서 다음 두 파일을 작업하게 됩니다.

  • Account.lua: 기존 Account 클래스에 :withdraw(amount) 메서드를 추가합니다. 계좌에 잔액이 충분하면 금액을 차감하고 true를 return합니다. 자금이 충분하지 않으면 Insufficient funds를 print하고 잔액을 변경하지 않은 채 false를 return합니다.
  • main.lua: 계좌를 생성하고, 자금을 마련하기 위해 입금한 다음, 여러 번의 인출을 시도하여 성공한 거래와 실패한 거래를 모두 확인합니다.

네 개의 입력을 받습니다.

  1. initial 입금 금액
  2. first 인출 금액
  3. second 인출 금액
  4. 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 컴파일러