Menu
Coddy logo textTech

복습 - 은행 계좌 관리자

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 20번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 class property 개념을 하나로 모아 완전한 은행 계좌 관리 시스템을 만들어 보겠습니다. 계좌 데이터를 적절히 캡슐화하면서 은행 전체 통계를 추적하는 BankAccount class를 만들게 됩니다.

코드는 두 개의 파일로 구성합니다.

  • BankAccount.php: 개별 계좌를 관리하고 전체 은행 통계를 추적하는 BankAccount class를 Define합니다. class에는 다음 항목이 포함되어야 합니다.
    • 100으로 설정된 상수 MINIMUM_BALANCE
    • 생성 후 변경할 수 없는 public readonly property string $accountId
    • 계좌 소유자의 이름을 위한 public property $holderName
    • 계좌 잔액을 보호하기 위한 private property $balance
    • 0에서 시작하는 private static property $totalAccounts
    • 0에서 시작하는 private static property $totalDeposits
    constructor는 계좌 ID, 소유자 이름, initial 잔액을 받아야 합니다. 모든 instance property를 설정하고 총 계좌 수를 increment해야 합니다. 다음 method를 포함하세요.
    • getBalance(): current 잔액을 반환
    • deposit($amount): 잔액에 금액을 더하고 total deposits tracker를 업데이트한 후 새로운 잔액을 반환
    • withdraw($amount): 남은 잔액이 minimum balance constant 이상으로 유지되는 경우에만 잔액에서 차감하고, 새로운 잔액을 반환합니다. (출금이 allowed되지 않으면 변경되지 않은 잔액을 반환합니다.)
    • static method getTotalAccounts(): 생성된 총 계좌 수를 반환
    • static method getTotalDeposits(): 모든 계좌에서 이루어진 모든 예금의 합계를 반환
  • main.php: BankAccount class 파일을 Include합니다. 네 개의 inputs를 받습니다. 첫 번째 account ID, 첫 번째 holder name, 두 번째 account ID, 두 번째 holder name입니다. 두 개의 계좌를 만들고, 두 계좌 모두 initial 잔액은 500으로 설정합니다. 첫 번째 계좌의 경우: 200을 deposit한 다음 100을 withdraw합니다. 다음 형식으로 한 줄에 account ID, holder name, 잔액을 Print합니다: "[accountId]: [holderName] - $[balance]" 두 번째 계좌의 경우: 300을 deposit한 다음 800을 withdraw하려고 시도합니다. (minimum balance 때문에 실패해야 합니다.) 이 계좌에도 동일한 형식으로 Print합니다. 마지막으로 total accounts와 total deposits를 별도의 줄에 Print합니다.
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

이 challenge에서는 변경할 수 없는 식별자를 위한 readonly properties, 보호된 데이터를 위한 getter methods가 있는 private properties, 고정된 규칙을 위한 constants, 그리고 은행 전체 통계를 위한 static properties와 static methods를 함께 사용합니다.

직접 해보기

<?php

require_once 'BankAccount.php';

// 입력 읽기
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));

// TODO: 초기 잔액 500으로 첫 번째 계좌 생성

// TODO: 초기 잔액 500으로 두 번째 계좌 생성

// TODO: 첫 번째 계좌: 200 입금 후 100 출금

// TODO: 첫 번째 계좌 정보 출력: "[accountId]: [holderName] - $[balance]"

// TODO: 두 번째 계좌: 300 입금 후 800 출금 시도

// TODO: 두 번째 계좌 정보 출력: "[accountId]: [holderName] - $[balance]"

// TODO: Print "Total Accounts: [count]"

// TODO: Print "Total Deposits: $[amount]"

?>

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 PHP 컴파일러