Menu
Coddy logo textTech

요약 - 은행 계좌 관리 프로그램

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

challenge icon

챌린지

쉬움

이 장에서 배운 모든 클래스 속성 개념을 통합하는 완전한 은행 계좌 관리 시스템을 구축해 보겠습니다. 계좌 데이터를 적절히 캡슐화하면서 은행 전체의 통계를 추적하는 BankAccount 클래스를 만들게 됩니다.

코드는 두 개의 파일로 구성됩니다:

  • BankAccount.php — 개별 계좌를 관리하고 전체 은행 통계를 추적하는 BankAccount 클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다:
    • 100으로 설정된 상수 MINIMUM_BALANCE
    • 생성 후 변경할 수 없는 public readonly 속성 string $accountId
    • 계좌 소유자 이름을 위한 public 속성 $holderName
    • 계좌 잔액을 보호하기 위한 private 속성 $balance
    • 0으로 시작하는 private static 속성 $totalAccounts
    • 0으로 시작하는 private static 속성 $totalDeposits
    생성자(constructor)는 계좌 ID, 소유자 이름, 초기 잔액을 인자로 받아야 합니다. 모든 인스턴스 속성을 설정하고 전체 계좌 수(total accounts count)를 증가시켜야 합니다. 다음 메서드들을 포함하세요:
    • getBalance() — 현재 잔액을 반환합니다.
    • deposit($amount) — 잔액에 금액을 추가하고 전체 예금 추적기(total deposits tracker)를 업데이트한 후, 새로운 잔액을 반환합니다.
    • withdraw($amount) — 남은 잔액이 최소 잔액 상수(minimum balance constant) 이상으로 유지되는 경우에만 잔액에서 금액을 차감하고, 새로운 잔액을 반환합니다 (출금이 허용되지 않는 경우 변경되지 않은 잔액을 반환합니다).
    • 정적 메서드 getTotalAccounts() — 생성된 총 계좌 수를 반환합니다.
    • 정적 메서드 getTotalDeposits() — 모든 계좌에서 이루어진 총 예금액의 합계를 반환합니다.
  • main.php — BankAccount 클래스 파일을 포함합니다. 네 개의 입력을 받게 됩니다: 첫 번째 계좌 ID, 첫 번째 소유자 이름, 두 번째 계좌 ID, 두 번째 소유자 이름. 두 계좌 모두 초기 잔액 500으로 생성합니다. 첫 번째 계좌: 200을 예금한 다음, 100을 출금합니다. 계좌 ID, 소유자 이름, 잔액을 한 줄에 "[accountId]: [holderName] - $[balance]" 형식으로 출력합니다. 두 번째 계좌: 300을 예금한 다음, 800 출금을 시도합니다 (최소 잔액 규칙으로 인해 실패해야 합니다). 이 계좌에 대해서도 동일한 형식으로 출력합니다. 마지막으로, 총 계좌 수와 총 예금액을 별도의 줄에 출력합니다:
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

이 챌린지는 불변 식별자를 위한 readonly 속성, 보호된 데이터를 위한 getter 메서드가 있는 private 속성, 고정된 규칙을 위한 상수, 그리고 은행 전체 통계를 위한 static 속성과 static 메서드를 결합합니다.

직접 해보기

<?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: "Total Accounts: [count]" 출력

// TODO: "Total Deposits: $[amount]" 출력

?>

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