파이썬 프로퍼티 소개
파이썬에서 프로퍼티(Property)는 클래스의 속성에 대한 접근을 제어할 수 있는 방법입니다. 프로퍼티를 사용하면 클래스 속성에 접근하는 것처럼 보이며, 실제로는 메소드를 호출하여 값을 가져오거나 설정할 수 있습니다. 이를 통해 속성에 대한 유효성 검사와 값의 변경을 제어할 수 있으며, 코드의 가독성을 높일 수 있습니다.
프로퍼티 구현 방법
파이썬에서 프로퍼티를 구현할 수 있는 두 가지 방법이 있습니다.
property
함수를 사용합니다.- 데코레이터를 사용합니다.
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
속성을 설정하려고 하면, 데코레이터로 정의된 메소드가 호출되어 유효성 검사가 수행됩니다.
이 글에서는 파이썬 프로퍼티와 데코레이터에 대해 알아보았습니다.
휴. 감사합니다.
'Developer > Python' 카테고리의 다른 글
<Python> Namespace와 Scope (0) | 2023.08.09 |
---|---|
<Python> 정적 메서드(staticmethod)와 클래스 메서드(classmethod) (0) | 2023.08.08 |
<Python> 상속 및 메서드 오버라이드 (0) | 2023.08.06 |
<Python> 클래스와 객체 지향 프로그래밍 (0) | 2023.08.06 |
<Python> 파일 읽기 및 쓰기 (0) | 2023.08.05 |