두 번째 방법은 프로퍼티(property)라는 기법입니다. 프로퍼티를 이용하면 멤버에 접근하는 것처럼 보이지만 사실은 메서드를 호출합니다. 코드를 수정하여 확인해 보겠습니다.
코드 6-25 oop1/oop1_2/info_hiding_property.py
class Account: def _ _init__(self, name, money): self.user = name # 인스턴스 멤버 선언이 아니라 #3의 setter 메서드를 호출 self.balance = money #1 @property def balance(self): #2 return self._balance @balance.setter def balance(self, money): #3 if money < 0: return # 실제 인스턴스 멤버 선언이 일어나는 부분(#1 실행시(생성자 호출시)) self._balance = money if __name__ = = "__main__": my_acnt = Account('greg', 5000) my_acnt.balance = -3000 #4 print(my_acnt.balance) #5
실행결과 5000
데코레이터 @property를 함수 정의에 붙였습니다(#2). 데코레이터를 붙이는 순간 balance() 메서드는 getter 함수가 되어 Info_hiding.cpp의 get_balance() 메서드와 같은 역할을 합니다.