파이썬의 Property 사용법
파이썬에서 property는 일반적으로 property() 함수 또는 @property 데코레이터를 가리킵니다. 둘은 같은 기능을 제공하며, 클래스에서 getter, setter, deleter를 정의하여 속성 접근 방식을 제어하는 데 사용됩니다.
즉, property라는 용어는 데코레이터 그 자체만을 뜻하는 것이 아니라, 파이썬에서 속성을 정의하고 관리하는 데 사용하는 메커니즘을 의미합니다.
1. property() 함수
property()는 파이썬에서 제공하는 내장 함수로, 클래스 속성의 getter, setter, deleter를 정의할 수 있습니다.- 인수를 통해 속성 접근을 제어하는 메서드를 설정합니다:
fget: getter 메서드.fset: setter 메서드.fdel: deleter 메서드.doc: 속성의 문서화 문자열.
예제: property() 함수
class MyClass:
def __init__(self, value):
self._value = value
def get_value(self): # getter
return self._value
def set_value(self, new_value): # setter
if new_value < 0:
raise ValueError("Value must be non-negative")
self._value = new_value
def del_value(self): # deleter
del self._value
value = property(get_value, set_value, del_value, "This is a managed property")
obj = MyClass(10)
print(obj.value) # getter 호출: 10
obj.value = 20 # setter 호출
print(obj.value) # 출력: 20
del obj.value # deleter 호출
2. @property 데코레이터
@property데코레이터는property()함수를 간소화한 문법입니다.@property를 사용해 getter 메서드를 정의하고,@<property_name>.setter와@<property_name>.deleter를 사용해 setter 및 deleter를 정의할 수 있습니다.
예제: @property 데코레이터
class MyClass:
def __init__(self, value):
self._value = value
@property
def value(self): # getter
return self._value
@value.setter
def value(self, new_value): # setter
if new_value < 0:
raise ValueError("Value must be non-negative")
self._value = new_value
@value.deleter
def value(self): # deleter
del self._value
obj = MyClass(10)
print(obj.value) # getter 호출: 10
obj.value = 20 # setter 호출
print(obj.value) # 출력: 20
del obj.value # deleter 호출
3. property()와 @property의 차이점
| property() | @property 데코레이터 |
|————————————–|———————————————–|
| 함수 호출을 통해 getter, setter, deleter를 설정 | 데코레이터로 간결한 문법 제공 |
| 명시적으로 property(fget, fset, fdel) 사용 | @property, @<name>.setter, @<name>.deleter 사용 |
| 문서 문자열을 인수로 전달 가능 | __doc__에 문자열을 추가하면 동일한 효과 |
4. property를 사용하는 이유
- 캡슐화: 외부에서 속성에 직접 접근하지 못하게 하고, getter와 setter를 통해 제어합니다.
- 동작 추가: 속성 값을 읽거나 쓸 때, 추가적인 동작(유효성 검사, 계산 등)을 수행할 수 있습니다.
- 코드 가독성: 속성처럼 사용되는 간결한 인터페이스 제공.
예제: 속성 값 검증
class Temperature:
def __init__(self, celsius):
self._celsius = celsius
@property
def celsius(self): # getter
return self._celsius
@celsius.setter
def celsius(self, value): # setter
if value < -273.15:
raise ValueError("Temperature below -273.15°C is not possible")
self._celsius = value
temp = Temperature(25)
print(temp.celsius) # 출력: 25
temp.celsius = -300 # ValueError: Temperature below -273.15°C is not possible
5. 잘못된 이해 방지
property라는 단어 자체는 파이썬의 속성 관리 메커니즘 전체를 지칭할 수 있습니다.@property데코레이터는property()함수의 간소화된 문법으로, 속성을 정의할 때 자주 사용됩니다.
6. 요약
property()는 파이썬 내장 함수로, getter, setter, deleter를 설정할 수 있습니다.@property데코레이터는property()를 간소화한 문법으로 더 직관적으로 사용 가능합니다.property는 캡슐화를 통해 속성 접근을 제어하고, 가독성과 유지보수성을 향상시키는 데 사용됩니다.