객체지향 기법

2023. 3. 12. 23:37Python/실전 예제로 배우는 파이썬 프로그래밍

캡슐화

자료와 알고리즘이 구현된 함수를 하나로 묶고, 공용 인터페이스만으로 접근을 제한하여 객체의 세부 내용을 외부로부터 감추는 기법을 캡슐화(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