PHpullh
학습 라이브러리/Python/프로퍼티 (getter/setter)

PYTHON · 객체지향

프로퍼티 (getter/setter)

@property로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.

객체지향중급property프로퍼티gettersetter

핵심 설명

@property로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.

Python code

class Temperature:
    def __init__(self, celsius: float = 0):
        self.celsius = celsius  # setter 호출

    @property
    def celsius(self) -> float:
        return self._celsius

    @celsius.setter
    def celsius(self, value: float):
        if value < -273.15:
            raise ValueError("절대영도 이하 불가")
        self._celsius = value

    @property
    def fahrenheit(self) -> float:
        return self._celsius * 9/5 + 32

    @fahrenheit.setter
    def fahrenheit(self, value: float):
        self.celsius = (value - 32) * 5/9

    def __repr__(self):
        return f"Temperature({self._celsius}°C / {self.fahrenheit}°F)"

t = Temperature(100)
print(t)              # Temperature(100°C / 212.0°F)
t.fahrenheit = 72
print(f"{t.celsius:.1f}°C")  # 22.2°C

# 읽기 전용 프로퍼티
class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14159 * self._radius ** 2

c = Circle(5)
print(f"면적: {c.area:.2f}")
# c.area = 100  # AttributeError

학습 팁

@property는 API를 변경하지 않고 단순 속성을 계산된 속성으로 전환할 수 있어 하위 호환성을 유지합니다.

주의할 점

__init__에서 self.celsius = value는 setter를 호출하지만, self._celsius = value는 직접 할당입니다. 의도를 명확히 하세요.

자주 묻는 질문

프로퍼티 (getter/setter)란 무엇인가요?

@property 로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.

프로퍼티 (getter/setter) 학습 시 주의할 점은 무엇인가요?

__init__ 에서 self.celsius = value 는 setter를 호출하지만, self._celsius = value 는 직접 할당입니다. 의도를 명확히 하세요.