더북(TheBook)

마이너스 통장이 아닌 이상 잔액이 음수가 될 수는 없습니다. private으로 balance 멤버를 숨기지 않았다면 유저 프로그래머가 balance로 직접 접근해 실수로 음수를 입력할 수 있습니다. 하지만 유저 프로그래머는 반드시 set_balance() 메서드를 통해 balance 값을 변경해야 하므로 실수 가능성을 줄일 수 있습니다. 게다가 함수 안에서 인자로 음수를 전달하면 balance 값을 변경하지 않고 함수를 종료하므로 원천적으로 balance에 음수가 입력되는 상황을 막을 수 있습니다.

int main(void){

      Account my_acnt("greg", 5000);


      //my_acnt.balance; // #4


      my_acnt.set_balance(-3000); // #5


      cout << my_acnt.get_balance() << endl;


      return 0;

}


실행결과 5000


set_balance() 메서드를 호출하면서 -3000을 입력합니다(#5). 하지만 메서드 안에서는 음수로 변경되지 않도록 막고 있으므로 balance 값을 출력하면 원래 값인 5000이 출력됩니다.

OOP에서 잘된 정보 은닉은 필요한 메서드만 공개하고 나머지는 모두 숨기는 것입니다. 멤버에 접근하거나 변경해야 할 때는 액세스 함수(access function)를 사용하여 접근하거나 변경해야 합니다. 숨겨진 balance 멤버에 접근하거나 변경하려면 get_balance()set_balance() 메서드를 이용해야 하는데 이 두 함수가 바로 액세스 함수입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.