Akashic Records

5.4 캡슐화 본문

Python for Beginners

5.4 캡슐화

Andrew's Akashic Records 2023. 3. 20. 13:44
728x90

캡슐화(Encapsulation)는 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 객체의 데이터와 메서드를 함께 묶어서 외부에서 접근을 제한하는 것을 의미합니다. 캡슐화를 사용하면 데이터와 메서드를 객체 내부에서만 사용하도록 할 수 있으며, 이를 통해 코드의 안정성과 유지 보수성을 높일 수 있습니다.

파이썬에서 캡슐화를 구현하는 방법은 주로 접근 제한자(Access Modifiers)를 사용합니다. 파이썬에서 접근 제한자는 다음과 같이 세 가지로 구분됩니다:

  1. Public: 이름 앞에 언더스코어(_)가 없는 변수나 메서드는 public으로 간주되며, 어디에서나 접근할 수 있습니다.

  2. Protected: 이름 앞에 하나의 언더스코어(_)가 있는 변수나 메서드는 protected로 간주되며, 해당 클래스와 하위 클래스에서만 접근할 수 있습니다. 그러나 파이썬에서는 실제로 외부 접근을 제한하지는 않고, 프로그래머에게 상속 관계에서만 사용하도록 권장한다는 의미입니다.

  3. Private: 이름 앞에 두 개의 언더스코어(__)가 있는 변수나 메서드는 private으로 간주되며, 해당 클래스 내부에서만 접근할 수 있습니다. 파이썬에서는 이름 장식(Name Mangling)을 통해 실제로 외부에서 접근하는 것을 어렵게 만듭니다.

캡슐화 예시 코드:

class BankAccount:
    def __init__(self, account_number, name, balance):
        self.__account_number = account_number
        self.__name = name
        self.__balance = balance

    # Getter 메서드
    def get_account_number(self):
        return self.__account_number

    def get_name(self):
        return self.__name

    def get_balance(self):
        return self.__balance

    # Setter 메서드
    def set_name(self, name):
        self.__name = name

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
        else:
            print("잔액이 부족합니다.")

    def display(self):
        print(f"계좌번호: {self.__account_number}, 이름: {self.__name}, 잔액: {self.__balance}")

위 예시에서 BankAccount 클래스의 인스턴스 변수들(__account_number, __name, __balance)은 private 접근 제한자를 사용하여 외부에서 직접 접근할 수 없게 합니다. 대신, getter와 setter 메서드를 통해 해당 변수들에 안전하게 접근하거나 값을 변경할 수 있습니다. 이렇게 캡슐화를 통해 데이터의 무결성을 유지하고 객체의 상태를 관리하는 로직을 적절하게 구현할 수 있습니다.

또한, deposit 및 withdraw 메서드를 통해 잔액 변경을 관리하고 있으며, 이러한 메서드를 사용하여 외부에서 잔액을 안전하게 조작할 수 있습니다. 이와 같이 캡슐화를 사용하면 코드의 안정성과 유지 보수성을 높일 수 있습니다.

캡슐화를 사용하는 주요 이점은 다음과 같습니다:

  1. 데이터 은닉(Data Hiding): 객체의 내부 상태를 외부에서 직접 접근할 수 없게 하여 데이터의 무결성을 유지합니다. 이를 통해 객체의 상태를 적절한 메서드를 사용하여 관리할 수 있습니다.

  2. 코드 재사용성(Reusability): 캡슐화된 객체는 독립적이기 때문에 다른 프로그램에서도 쉽게 재사용할 수 있습니다.

  3. 코드 유지 보수성(Maintainability): 객체의 상태를 관리하는 로직이 내부에 캡슐화되어 있으므로, 수정이 필요할 경우 해당 객체의 코드만 변경하면 됩니다. 이렇게 하면 전체 코드에 영향을 미치지 않고 유지 보수가 쉬워집니다.

  4. 코드의 안정성(Stability): 객체의 내부 상태를 외부로부터 보호함으로써 객체의 상태를 예상치 못한 방식으로 변경되는 것을 방지할 수 있습니다. 이를 통해 코드의 안정성이 향상됩니다.

캡슐화를 통해 데이터와 메서드를 함께 묶고 외부 접근을 제한하면, 객체 지향 프로그래밍의 원칙에 따라 안정적이고 유지 보수가 쉬운 코드를 작성할 수 있습니다.

728x90

'Python for Beginners' 카테고리의 다른 글

6.1 예외 처리  (0) 2023.03.21
5.5 디자인 패턴  (0) 2023.03.20
5.3 다형성  (0) 2023.03.20
5.2 상속  (0) 2023.03.20
5.1 클래스(Class)와 객체(Object)  (0) 2023.03.20
Comments