Menu
Coddy logo textTech

잔액 조회하기

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

challenge icon

챌린지

쉬움

Bank Account가 거의 완성되었습니다! account를 생성하고 자금을 deposit하며 돈을 withdraw할 수 있는 기능을 구현했지만, 중요한 한 가지 요소가 빠져 있습니다. 현재는 외부 코드에서 현재 balance를 확인할 방법이 없습니다. getter function을 추가하여 이 문제를 해결해 봅시다.

getter는 캡슐화된 모듈에서 숨겨진 데이터를 노출하는 올바른 방법입니다. balance 필드를 public으로 만드는 대신(이렇게 하면 캡슐화가 깨집니다), 값을 반환하는 읽기 전용 함수를 제공합니다. 이렇게 하면 데이터를 보호하면서도 제어된 접근을 허용할 수 있습니다.

계속해서 다음 세 파일을 작업합니다.

  • account.h: 새로운 함수 prototype인 get_balance를 추가합니다. 이 함수는 데이터를 읽기만 하고 수정하지 않으므로 const Account *를 매개변수로 받고, 현재 balance를 나타내는 double을 반환합니다. 기존의 모든 선언은 그대로 유지하세요.
  • account.c: get_balance 함수를 Implement합니다. 이 함수는 account에서 숨겨진 balance 필드를 단순히 반환합니다. 이 함수가 내부 데이터에 접근할 수 있는 이유는 struct와 같은 파일에 정의되어 있기 때문입니다. 외부 코드는 여전히 내부를 직접 들여다볼 수 없습니다.
  • main.c: 이제 account 내부에서 무슨 일이 일어나는지 마침내 확인할 수 있습니다! account를 생성하고, 몇 가지 거래를 수행한 다음, 새 getter를 사용하여 각 단계의 balance를 표시하세요.

네 가지 입력을 받습니다. account ID(정수), deposit amount, withdrawal amount, 그리고 second deposit amount입니다.

main 파일에서 account를 생성하고 initial balance(0.00이어야 함)를 출력하세요. 첫 번째 금액을 deposit한 후 새로운 balance를 출력합니다. 지정된 금액을 withdraw하고 balance를 다시 출력합니다. 마지막으로 두 번째 deposit을 수행하고 최종 balance를 출력하세요. 그런 다음 account를 destroy합니다.

출력은 다음 형식으로 표시하세요.

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

여기서 1001은 account ID이며, balance는 initial(0.00), 500.00을 deposit한 후, 300.00을 withdraw한 후, 다시 150.00을 deposit한 후의 값을 반영합니다. 모든 balance 값은 %.2f를 사용하여 소수점 이하 두 자리로 형식화하세요.

이 getter를 추가하면 Bank Account 모듈은 이제 account 데이터에 대한 완전하고 제어된 접근을 제공합니다. 사용자는 balance를 확인할 수 있지만, 검증된 deposit 및 withdraw 함수를 통해서만 수정할 수 있습니다.

직접 해보기

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: get_balance를 사용하여 초기 잔액 출력
    
    deposit(account, deposit1);
    // TODO: 첫 번째 입금 후 잔액 출력
    
    withdraw(account, withdraw_amount);
    // TODO: 출금 후 잔액 출력
    
    deposit(account, deposit2);
    // TODO: 두 번째 입금 후 잔액 출력
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

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

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