본문 바로가기
Python/실전 예제로 배우는 파이썬 프로그래밍

객체지향 기법

by 아이언곰 2023. 3. 12.

캡슐화

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