Menu
Coddy logo textTech

Property 데코레이터

Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 14번째.

프로퍼티 데코레이터를 사용하면 단순한 속성 구문을 유지하면서도 속성에 액세스하고 수정하는 방식을 제어할 수 있습니다.

프로퍼티 게터(property getter)가 있는 클래스의 예시입니다:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

프로퍼티를 일반 속성처럼 사용하세요:

person = Person("Alice", 30)
print(person.age)

출력:

30

실제로 메서드를 호출하고 있음에도 불구하고, 괄호 없이 age에 접근한다는 점에 유의하세요.

값을 설정할 때 데이터를 검증하기 위한 setter를 추가합니다:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

이제 자동 유효성 검사를 통해 나이를 설정할 수 있습니다:

person = Person("Alice", 30)
person.age = 31     # 유효성 검사가 포함된 setter를 사용합니다
print(person.age)   # getter를 사용합니다

# 이 코드는 오류를 발생시킵니다:
# person.age = -5   # ValueError: 나이는 음수가 될 수 없습니다

출력:

31

값을 계산하는 계산된 속성(computed properties)을 만듭니다:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # 5 * 3 = 15를 계산합니다

출력:

15

핵심 포인트: 프로퍼티 데코레이터는 메서드를 속성처럼 보이게 만듭니다. 게터(getter)에는 @property를 사용하고 세터(setter)에는 @attribute_name.setter를 사용하세요. 이를 통해 단순한 속성 액세스 구문을 유지하면서 데이터 유효성 검사 및 계산된 값을 처리할 수 있습니다.

challenge icon

챌린지

중급

temperature.py 파일에서 섭씨와 화씨 사이를 변환하는 Temperature 클래스를 완성하세요. 그런 다음 driver.py에서 이 클래스를 사용하여 온도 변환을 테스트하세요. 각 파일에 있는 TODO 주석을 따라 단계별 지침을 수행하세요.

치트 시트

프로퍼티 데코레이터(Property decorators)를 사용하면 간단한 속성 구문을 유지하면서 속성에 접근하고 수정하는 방식을 제어할 수 있습니다.

getter 메서드에는 @property를 사용하세요:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

person = Person("Alice", 30)
print(person.age)  # 속성처럼 접근하며, 괄호가 필요 없습니다

유효성 검사가 포함된 setter 메서드에는 @attribute_name.setter를 사용하세요:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

person = Person("Alice", 30)
person.age = 31  # 유효성 검사가 포함된 setter를 사용합니다

값을 계산하는 계산된 프로퍼티(computed properties)를 만듭니다:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # 5 * 3 = 15를 계산합니다

직접 해보기

# TODO: temperature 모듈에서 Temperature 클래스를 가져오세요

# 클래스 테스트:
# TODO: 25°C의 온도 인스턴스를 생성하세요
temp = None  # 실제 Temperature 인스턴스로 교체하세요

# TODO: 섭씨와 화씨 값을 모두 출력하세요
# TODO: "25.0°C is 77.0°F" 형식을 사용하세요

# TODO: 온도를 98.6°F로 설정하세요

# TODO: 변환이 잘 작동하는지 확인하기 위해 두 값을 다시 출력하세요
# TODO: 이전과 동일한 형식을 사용하세요
quiz icon실력 점검

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

Object Oriented Programming의 모든 레슨