본문 바로가기
파이썬

파이썬 캡슐화, 은닉화 이해하기

by python pro 2023. 1. 26.
반응형

 

"Python 캡슐화와 은닉화" 는 객체지향 프로그래밍의 기본 개념입니다. 캡슐화란 객체의 속성과 메서드를 하나로 묶어 관리하는 것을 의미하며, 은닉화란 객체의 내부 구조를 외부에서 숨기는 것을 의미합니다.

 

아래는 캡슐화와 은닉화를 이용한 예제 코드를 작성해보겠습니다.

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance
    
    def deposit(self, amount):
        self.__balance += amount
        print("Deposited:", amount)
    
    def withdraw(self, amount):
        if self.__balance >= amount:
            self.__balance -= amount
            print("Withdrawn:", amount)
        else:
            print("Insufficient balance")
    
    def check_balance(self):
        print("Balance:", self.__balance)

#Creating an object of BankAccount
account = BankAccount(1000)
account.deposit(500)
account.withdraw(200)
account.check_balance()
# Output: Deposited: 500
#         Withdrawn: 200
#         Balance: 1300

 

위 코드에서 __balance 변수는 은닉화되어 외부에서 직접 접근할 수 없으며, deposit(), withdraw(), check_balance() 메서드를 통해서만 접근이 가능합니다. 이렇게 함으로써 객체의 내부 구조를 외부에서 숨기고, 정상적인 작동을 위한 메서드를 통해서만 접근할 수 있도록 제한할 수 있습니다. 이렇게 하면 객체의 내부 구조가 변경되어도 외부 코드는 영향을 받지 않도록 할 수 있고, 코드를 더욱 안정적으로 만들 수 있습니다. 

 

캡슐화와 은닉화는 실제 업무에서도 많이 사용되며, 코드를 더욱 안정적으로 만들고 변경에 대한 영향을 최소화 할 수 있는 강력한 도구입니다.

 

만약, 은닉화된 변수인 __balance를 외부에서 접근하려 한다면 아래와 같이 접근하면 안됩니다.

print(account.__balance)

정상적인 접근방법은 클래스 안에서 정의된 함수를 사용하여 접근하는 것입니다.

print(account.check_balance()) # This will print the balance

 

 

Python의 캡슐화와 은닉화는 파이썬의 구조적인 특성 때문에 완벽하지 않을 수 있습니다.

 

첫번째로, 파이썬은 클래스 안에 정의된 변수를 은닉화 하는 것이 아닌, 앞에 밑줄을 붙이는 것만으로 은닉화를 하기 때문에 쉽게 접근이 가능할 수 있습니다.

print(account._BankAccount__balance) # This will print the balance despite being hidden

두번째로, 일부 라이브러리나 프레임워크는 파이썬의 은닉화 기능을 무시하고 접근이 가능할 수 있습니다.

따라서 파이썬의 캡슐화와 은닉화는 완벽하지 않을 수 있지만, 코드를 구조적으로 작성하고 프로그램의 안정성을 유지하는데에는 충분합니다. 그리고 일반적으로 코드를 작성할 때 은닉화를 적용하는 것이 좋습니다.

 

아래에는 예제 코드를 공유해드립니다.

class EncapsulationExample:
    def __init__(self):
        self.__hidden_variable = "I am a hidden variable"
        
    def access_hidden_variable(self):
        return self.__hidden_variable
        
    def change_hidden_variable(self, new_value):
        self.__hidden_variable = new_value

example = EncapsulationExample()
print(example.access_hidden_variable()) # Prints "I am a hidden variable"
example.change_hidden_variable("I am a new hidden variable")
print(example.access_hidden_variable()) # Prints "I am a new hidden variable"
print(example.__hidden_variable) # This will raise an AttributeError

이 예제에서는 클래스 EncapsulationExample의 생성자에서 __hidden_variable이라는 변수를 선언하고 은닉화 하였습니다. 그리고 이 변수를 읽거나 변경하기 위해서는 access_hidden_variable() 과 change_hidden_variable() 함수를 사용해야 합니다. 이렇게 하면 은닉화된 변수를 정상적으로 사용할 수 있으며, 외부에서 직접 접근하는 것을 방지할 수 있습니다.

반응형

'파이썬' 카테고리의 다른 글

파이썬 스태틱메소드 이해하기  (0) 2023.01.26
파이썬 클래스메소드  (0) 2023.01.26
파이썬 상속, 다형성 이해하기  (0) 2023.01.26
파이썬 클래스 정의하기  (0) 2023.01.26
파이썬 dictionary comprehension  (0) 2023.01.25

댓글