송금 기능
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 24번째.
챌린지
쉬움디지털 뱅크가 거의 완성되었습니다! 마지막 주요 기능은 계좌 간에 돈을 이체하는 기능입니다. 여기서 여러분의 객체 지향 설계가 진정으로 빛을 발합니다. 하나의 계좌 객체가 다른 계좌 객체와 직접 상호작용할 수 있습니다.
한 계좌에서 다른 계좌로 돈을 옮기는 :transfer(targetAccount, amount) 메서드를 추가할 것입니다. 이 작업에 실제로 무엇이 포함되는지 생각해 보세요. 소스 계좌에서의 출금과 그에 이은 대상 계좌로의 입금입니다. 이미 만들어 놓은 메서드들을 재사용할 수 있다는 점이 장점입니다!
기존 파일들을 계속해서 작성해 나갑니다:
Account.lua: Account 클래스에:transfer(targetAccount, amount)메서드를 추가하세요. 이 메서드는self에서 해당 금액을 출금하려고 시도하고, 성공하면 그 금액을targetAccount에 입금해야 합니다. 출금에 실패하면(잔액 부족), 이체는 일어나지 않아야 합니다. 기존의 모든 기능(ID가 포함된 생성자, deposit, withdraw, getBalance, __tostring)을 그대로 유지하세요.main.lua: 여러 계좌를 생성하고 계좌 간의 이체를 시연하여, 서로 다른 계좌 객체들 사이에서 잔액이 어떻게 변하는지 보여주세요.
다섯 개의 입력을 받게 됩니다:
- 첫 번째 계좌의 ID
- 두 번째 계좌의 ID
- 첫 번째 계좌에 대한 초기 입금액
- 첫 번째 이체 금액 (계좌 1에서 계좌 2로)
- 두 번째 이체 금액 (계좌 1에서 계좌 2로)
메인 파일에서 주어진 ID로 두 개의 계좌를 생성하고(둘 다 잔액 0에서 시작), 첫 번째 계좌에 초기 금액을 입금한 다음, 첫 번째 계좌에서 두 번째 계좌로 두 번의 이체를 시도하세요. 각 이체 시도 후, 두 계좌를 모두 출력하세요(__tostring이 현재 상태를 보여줄 것입니다).
예를 들어, 입력값이 101, 102, 500, 200, 400이라면 출력은 다음과 같아야 합니다:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200첫 번째 계좌는 입금 후 500으로 시작합니다. 200의 첫 번째 이체는 성공하여 계좌 101에는 300이 남고 계좌 102에는 200이 생깁니다. 400의 두 번째 이체는 계좌 101에 300만 있기 때문에 실패하며, 따라서 두 계좌의 잔액은 변하지 않고 유지됩니다.
직접 해보기
-- Account 모듈을 불러옵니다
local Account = require('Account')
-- 다섯 개의 입력을 읽습니다
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- ID를 사용하여 두 개의 계좌를 생성합니다
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- 첫 번째 계좌에 초기 금액을 입금합니다
account1:deposit(initialDeposit)
-- TODO: account1에서 account2로 첫 번째 이체를 시도합니다
-- TODO: 첫 번째 이체 후 두 계좌를 모두 출력합니다
-- TODO: account1에서 account2로 두 번째 이체를 시도합니다
-- TODO: 두 번째 이체 후 두 계좌를 모두 출력합니다