<Python> 프로퍼티(Property)와 데코레이터(Decorator)

반응형

파이썬 프로퍼티 소개

파이썬에서 프로퍼티(Property)는 클래스의 속성에 대한 접근을 제어할 수 있는 방법입니다. 프로퍼티를 사용하면 클래스 속성에 접근하는 것처럼 보이며, 실제로는 메소드를 호출하여 값을 가져오거나 설정할 수 있습니다. 이를 통해 속성에 대한 유효성 검사와 값의 변경을 제어할 수 있으며, 코드의 가독성을 높일 수 있습니다.

프로퍼티 구현 방법

파이썬에서 프로퍼티를 구현할 수 있는 두 가지 방법이 있습니다.

  1. property 함수를 사용합니다.
  2. 데코레이터를 사용합니다.

property 함수 사용하기

property 함수를 사용하여 프로퍼티를 정의하려면, 클래스 내에서 속성을 가져오는 메소드를 작성한 후, 해당 메소드를 property로 정의합니다.

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

    def get_radius(self):
        return self._radius

    radius = property(get_radius)

이제 Circle 클래스의 인스턴스를 생성하고 radius 속성에 접근하면 get_radius 메소드가 호출됩니다.

circle = Circle(5)
print(circle.radius)  # 출력: 5

데코레이터 사용하기

데코레이터를 사용하여 프로퍼티를 정의하려면, 속성을 가져오는 메소드에 @property 데코레이터를 사용합니다.

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

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

이 예제에서도 Circle 클래스의 인스턴스를 생성하고 radius 속성에 접근하면, 데코레이터로 정의된 메소드가 호출됩니다.

데코레이터 소개

데코레이터(Decorator)는 파이썬의 고급 기능 중 하나로, 어떤 함수나 메소드의 기능을 변경하거나 확장할 때 사용할 수 있습니다. 데코레이터는 함수를 입력으로 받아 새로운 함수를 반환하는 함수입니다.

def decorator(func):
    def wrapper(*args, **kwargs):
        # func 전처리
        result = func(*args, **kwargs)
        # func 후처리
        return result
    return wrapper

데코레이터 사용하기

데코레이터를 사용하려면, 정의된 데코레이터를 대상 함수의 앞에 @ 기호와 함께 사용합니다.

@decorator
def some_function():
    # 코드 작성

데코레이터는 여러 개를 사용할 수 있으며, 사용 순서에 따라 데코레이터가 적용됩니다.

@decorator1
@decorator2
def some_function():
    # 코드 작성

프로퍼티 세터와 데코레이터

파이썬에서 클래스 속성을 설정하기 위해 데코레이터를 사용할 수도 있습니다. 이를 속성 설정자(setter)라고 합니다. settter 데코레이터를 사용하면 속성을 설정할 때 유효성 검사를 수행할 수 있습니다.

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("Radius cannot be negative")
        self._radius = value

이제 Circle 클래스의 인스턴스에서 radius 속성을 설정하려고 하면, 데코레이터로 정의된 메소드가 호출되어 유효성 검사가 수행됩니다.

이 글에서는 파이썬 프로퍼티와 데코레이터에 대해 알아보았습니다. 

 

휴. 감사합니다.

Designed by JB FACTORY