Menu
Coddy logo textTech

프로퍼티 데코레이터

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는 값이 할당되는 방식을 제어하여 데이터 유효성 검사 및 캡슐화를 가능하게 합니다.

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Object Oriented Programming의 모든 레슨