본문 바로가기
프로그래밍 언어(Programming Languages)/파이썬(Python)

[Python] @property 데코레이터로 캡슐화 구현하기 🛡️🐍

by 데이터 벌집 2023. 11. 6.

객체 지향 프로그래밍의 핵심 원칙 중 하나는 캡슐화(Encapsulation)입니다. 캡슐화는 객체의 상태와 행동을 함께 묶는 것을 의미하며, 이를 통해 객체의 상태를 외부에서 직접 변경하는 것을 제한하고, 특정 메서드를 통해서만 접근하도록 만들 수 있습니다. 🌐 파이썬에서는 @property 데코레이터를 사용하여 캡슐화를 효과적으로 구현할 수 있습니다.

 

@property

 

1. @property 데코레이터란? 🔍

 

@property는 메서드를 속성처럼 호출할 수 있게 해주는 데코레이터입니다. 이를 통해 메서드를 변수처럼 간단하게 접근할 수 있게 됩니다.

 


2. 기본 사용법 📝

 

아래는 @property를 사용한 간단한 예시입니다:

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError("반지름은 음수일 수 없습니다!")
        self._radius = value

 

위 코드에서 radius는 외부에서 직접 접근할 수 없는 _radius 속성의 값을 가져오거나 설정하는 메서드로 사용됩니다. 🔄

 

해당 코드를 보면 Circle이라는 원을 표현하는 클래스가 있습니다. 이 클래스는 반지름 값을 가지고 있는데요, 그 반지름 값을 안전하게 관리하기 위한 방법들이 작성되어 있습니다.

 

1. self._radius 초기화:

 

Circle 클래스의 객체를 처음 만들 때, 원하는 반지름 값을 넣어주면 self._radius라는 상자에 그 값을 저장합니다.

 

my_circle = Circle(5)

 

위 코드를 실행하면 반지름이 5인 원을 만들 수 있어요.

 

2. 반지름 값을 가져오기:

 

@property 데코레이터가 있는 radius 메서드는 현재 저장된 반지름 값을 가져올 때 사용합니다. 이건 창문을 통해 상자 안을 보는 것과 비슷해요.

 

print(my_circle.radius)

 

위 코드를 실행하면 현재 저장된 반지름 값인 5가 출력됩니다.

3. 반지름 값을 변경하기: 

@radius.setter 데코레이터가 있는 radius 메서드는 반지름 값을 변경하고 싶을 때 사용합니다. 이건 창문을 통해 상자 안의 것을 바꾸는 것과 같아요. 하지만 여기서는 값이 음수로 들어오면 오류를 발생시키도록 설정되어 있습니다.

 

my_circle.radius = 7 # 반지름 값을 7로 변경합니다.

 

그런데 만약 다음처럼 음수 값을 넣으면?

 

my_circle.radius = -3 # 반지름은 음수일 수 없습니다!라는 오류 메세지가 나올 것입니다.

 

 

이렇게 @property와 @radius.setter 데코레이터를 사용해서, 반지름 값에 직접 접근하는 대신 안전한 방법으로 값을 가져오거나 바꿀 수 있게 만든 것입니다! 🌟


 

3. 장점 🌟

 

  • 정보 은닉: 내부 속성을 직접 노출시키지 않고, 특정 메서드를 통해 접근하게 함으로써 객체의 상태를 안전하게 관리할 수 있습니다.
  • 유연성: 내부 구현을 변경해도 외부에서의 접근 방법은 동일하게 유지됩니다. 이를 통해 코드의 수정이 간편해집니다.

 

 

🎉 파이썬의 @property 데코레이터는 객체 지향 프로그래밍의 캡슐화 원칙을 효과적으로 구현하는 강력한 도구입니다. 이를 활용하여 안정적이고 유지보수하기 좋은 코드를 작성해보세요!