캡슐화
자료와 알고리즘이 구현된 함수를 하나로 묶고, 공용 인터페이스만으로 접근을 제한하여 객체의 세부 내용을 외부로부터 감추는 기법을 캡슐화(encapsulation)라고 합니다. 클래스에서 은닉정보는 변수 앞부분에 _기호를 연속하여 두 개 넣으면 외부에서 접근이 불가능한 은닉(private) 변수가 됩니다. 그리고 은닉 변수를 외부에서 접근할 수 있는 공용 인터페이스는 획득자(getter)와 지정자(setter)로 분류합니다.
실습 캡슐화 예시
class Account:
# (1) 은닉 멤버변수
__balance = 0 # 잔액
__accName = None # 예금주
__accNo = None # 계좌번호
# (2) 생성자: 멤버변수 초기화
def __init__(self, bal, name, no):
self.__balance = bal # 잔액 초기화
self.__accName = name # 예금주
self.__accNo = no # 계좌번호
# (3) 계좌정보 확인: Getter
def getBalance(self):
return self.__balance, self.__accNa
me, self__accNo
# (4) 입금하기: Setter
def deposit(self, money):
if money < 0:
print('금액 확인')
return # 종료(exit)
self.__balance += money
# (5) 출금하기: Setter
def withdraw(self, money):
if self.balance < money:
print('잔액 부족')
return # 종료(exit)
self.__balance -= money
# (6) object 생성
acc = Account(1000, '홍길동', '125-152-4125-41
') # 생성자
# (7) Getter 호출
acc.__balance # 오류(Error)
bal = acc.getBalance()
print('계좌정보 : ', bal)
계좌정보 : (1000, '홍길동', '125-152-4125-41')
# (8) Setter 호출
acc.deposit(10000) # 10,000원 입금
bal = acc.getBalance()
print('계좌정보: ', bal) # 입금 확인
계좌정보 : (21000, '홍길동', '125-152-4125-41')
# (1) 은닉 멤버 변수
잔액(balance),예금주(accName), 계좌번호(accNo) 멤버변수는 모두 '__변수명' 형태로 선언되었기 때문에 외부에서 직접 접근이 불가능한 은닉 멤버변수입니다.
# (2) 생성자: 멤버변수 초기화
생성자는 객체 생성 시점에서 매개변수로 넘겨받은 실인수를 은닉 멤버변수에 초기화는 가능합니다.
# (3) 계좌정보 확인: Getter
은닉 멤버변수의 값을 외부에서 받을 수 있는 획득자 메서드입니다.
# (4) 입금하기: Setter
은닉 멤버변수 중에서 전액(__balance) 변수에 입금액(money)을 더해서 잔액을 수정하는 메서드입니다. 외부에서 은닉 멤버변수의 값을 수정하는 역할을 하므로 deposit은 지정자 메서드가 됩니다. 입금액이 음수이면 메서드는 실행을 종료합니다.
# (5) 출금하기: Setter
은닉 멤버변수 중에서 잔액(__balance) 변수에 입금액(money)을 빼서 잔액을 수정하는 메서드입니다. 외부에서 은닉 멤버변수의 값을 수정하는 역할을 하므로 withdraw는 지정자 메서드가 됩니다. 출금액이 잔액보다 더 많으면 메서드는 실행을 종료합니다.
# (6) object 생성
Account 클래스의 생성자와 잔액, 예금주, 계좌번호의 실인수를 이용하여 '홍길동'의 계좌를 생성합니다.
# (7) Getter 호출
객체의 참조변수를 이용하여 계좌정보를 확인하는 getBalance() 메서드를 호출하여 은닉 멤버변수의 값을 확인합니다. 은닉 멤버변수는 '참조변수. 멤버변수' 형태로 접근은 불가능하고, 획득자나 지정자 메서드에 의해서만 접근할 수 있습니다.
# (8) Setter 호출
계좌에 입금하는 deposit() 메서드를 호출하여 10,000원을 입금하고, getBalance() 메서드를 호출하여 입금된 잔액을 확인합니다.
'Python > 실전 예제로 배우는 파이썬 프로그래밍' 카테고리의 다른 글
패키지와 모듈 (0) | 2023.03.14 |
---|---|
내장클래스 (0) | 2023.03.13 |
클래스(Class) (0) | 2023.03.11 |
프로그램 블록 만들기 연습문제 (0) | 2023.03.10 |
재귀함수(Recursive function) (0) | 2023.03.09 |