프로퍼티 데코레이터
Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 10번째.
@property 데코레이터를 사용하면 메서드를 속성처럼 액세스할 수 있어 값을 가져오고(get) 설정하는(set) 깔끔한 방법을 제공합니다. 이는 캡슐화에 유용하며, 클래스의 공개 인터페이스를 변경하지 않고도 유효성 검사 로직이나 계산된 값을 추가할 수 있게 해줍니다.
다음은 @property를 사용하는 class의 예시입니다:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2실제 값을 저장하기 위해 self._radius를 사용한다는 점에 유의하세요. 만약 getter 내부에서 self.radius를 사용한다면, getter 메서드를 다시 호출하여 무한 재귀에 빠지게 됩니다.
원(circle)을 생성하고 속성에 접근합니다:
my_circle = Circle(5)일반 속성처럼 속성에 접근합니다:
print(my_circle.radius)
print(my_circle.area)출력 결과:
5
78.53975속성에 접근할 때 괄호 ()를 사용하지 않는다는 점에 유의하세요. 속성은 속성처럼 보이지만 메서드 코드를 실행합니다.
유효성 검사를 통해 값을 변경할 수 있도록 setter를 추가합니다:
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:
self._radius = value
else:
print("Radius must be positive!")이제 속성처럼 radius를 설정할 수 있습니다:
my_circle = Circle(5)
my_circle.radius = 10 # Uses the setter
print(my_circle.radius) # Uses the getter출력:
10핵심 포인트: @property는 메서드를 속성처럼 보이게 만들고, @property_name.setter는 값이 할당되는 방식을 제어하여 데이터 유효성 검사 및 캡슐화를 가능하게 합니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.