Menu
Coddy logo textTech

송금 기능

Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 24번째.

challenge icon

챌린지

쉬움

디지털 뱅크가 거의 완성되었습니다! 마지막 주요 기능은 계좌 간에 돈을 이체하는 기능입니다. 여기서 여러분의 객체 지향 설계가 진정으로 빛을 발합니다. 하나의 계좌 객체가 다른 계좌 객체와 직접 상호작용할 수 있습니다.

한 계좌에서 다른 계좌로 돈을 옮기는 :transfer(targetAccount, amount) 메서드를 추가할 것입니다. 이 작업에 실제로 무엇이 포함되는지 생각해 보세요. 소스 계좌에서의 출금과 그에 이은 대상 계좌로의 입금입니다. 이미 만들어 놓은 메서드들을 재사용할 수 있다는 점이 장점입니다!

기존 파일들을 계속해서 작성해 나갑니다:

  • Account.lua: Account 클래스에 :transfer(targetAccount, amount) 메서드를 추가하세요. 이 메서드는 self에서 해당 금액을 출금하려고 시도하고, 성공하면 그 금액을 targetAccount에 입금해야 합니다. 출금에 실패하면(잔액 부족), 이체는 일어나지 않아야 합니다. 기존의 모든 기능(ID가 포함된 생성자, deposit, withdraw, getBalance, __tostring)을 그대로 유지하세요.
  • main.lua: 여러 계좌를 생성하고 계좌 간의 이체를 시연하여, 서로 다른 계좌 객체들 사이에서 잔액이 어떻게 변하는지 보여주세요.

다섯 개의 입력을 받게 됩니다:

  1. 첫 번째 계좌의 ID
  2. 두 번째 계좌의 ID
  3. 첫 번째 계좌에 대한 초기 입금액
  4. 첫 번째 이체 금액 (계좌 1에서 계좌 2로)
  5. 두 번째 이체 금액 (계좌 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: 두 번째 이체 후 두 계좌를 모두 출력합니다

Object Oriented Programming의 모든 레슨