0Pricing
Python Academy · 강의

@property 데코레이터

getter, setter 및 deleter에 property를 사용합니다.

@property 데코레이터은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

소개

@property는 메서드를 읽을 수 있는 속성으로 바꿉니다. @setter와 @deleter는 제어된 접근 패턴을 완성합니다.

@property를 사용하는 이유

Java 방식의 getX()/setX() 대신 파이썬에서는 @property를 사용합니다. 접근 방식은 속성과 같습니다. obj.get_value()가 아니라 obj.value처럼 사용합니다.
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
c = Circle(5)
print(c.radius)  # no ()

계산된 속성

@property 메서드는 필요할 때 계산됩니다. obj.area는 접근할 때마다 계산되므로 저장된 값이 필요하지 않습니다.
import math
class Circle:
    def __init__(self, r): self._r = r
    @property
    def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))

속성 설정자

@property_name.setter는 설정자를 추가합니다. 이제 c.radius = 10을 실행하면 설정자 메서드가 호출됩니다.
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
    @radius.setter
    def radius(self, val):
        if val <= 0: raise ValueError('radius must be positive')
        self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)

속성 삭제자

@property_name.deleter는 del obj.attr을 처리합니다. 정리 로직에 사용하십시오.
class User:
    def __init__(self, name): self._name = name
    @property
    def name(self): return self._name
    @name.deleter
    def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))

읽기 전용 속성

게터만 정의하고 설정자는 정의하지 마십시오. 값을 할당하려고 하면 AttributeError가 발생합니다.
class Const:
    def __init__(self, v): self._v = v
    @property
    def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)

유효성 검사가 있는 속성

설정자는 데이터를 검증하기에 가장 적합한 곳입니다. 저장하기 전에 자료형, 범위 또는 형식을 확인할 수 있습니다.
class BoundedInt:
    def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
    @property
    def value(self): return self._v
    @value.setter
    def value(self, v):
        if not self.lo <= v <= self.hi:
            raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
        self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)

property를 사용한 캐싱

@property와 캐시된 값을 결합하면 한 번만 계산한 뒤 메모이제이션할 수 있습니다.
class Expensive:
    _cache = None
    @property
    def result(self):
        if self._cache is None:
            self._cache = sum(range(1000))
        return self._cache
e = Expensive()
print(e.result)
print(e.result)

cached_property (파이썬 3.8 이상)

@functools.cached_property는 속성을 한 번 계산한 뒤 인스턴스 속성으로 저장하므로 반복 계산을 하지 않습니다.
from functools import cached_property
import math
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))

Property와 __slots__ 비교

__slots__는 임의의 속성 생성을 방지하고 메모리를 절약합니다. 속성은 로직을 추가합니다. 두 기능은 서로 보완적으로 사용할 수 있습니다.
class Point:
    __slots__ = ('_x', '_y')
    def __init__(self, x, y): self._x,self._y=x,y
    @property
    def x(self): return self._x
p = Point(1, 2)
print(p.x)

@property를 사용할 시점

다음과 같은 경우 @property를 사용하십시오. 유효성 검사가 필요하거나, 계산된 값이 필요하거나, 내부 구현을 변경하면서 하위 호환성을 유지해야 할 때입니다.
# Before: class Person:
#     def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
    def __init__(self, age): self.age = age
    @property
    def age(self): return self._age
    @age.setter
    def age(self, v):
        if v < 0: raise ValueError('negative age')
        self._age = v
p = Person(30)
print(p.age)

빠른 확인

읽기 전용 @property(설정자가 정의되지 않음)에 값을 할당하려고 하면 어떻게 됩니까?

복습

@property: 게터를 속성 접근으로 바꿉니다. @name.setter는 쓰기 기능을 추가합니다. @name.deleter는 del 기능을 추가합니다. @cached_property는 한 번 계산합니다. 설정자는 유효성 검사에 사용합니다.

계속하기

훌륭하게 진행하고 계십니다! 다음 개념을 완전히 익힐 때까지 계속 학습하십시오.

자주 묻는 질문

“@property 데코레이터” 강의는 무료인가요?

네 — “@property 데코레이터” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“@property 데코레이터”에서 뭘 배우나요?

getter, setter 및 deleter에 property를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“@property 데코레이터” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 일급 객체로서의 함수
  2. 사용자 정의 데코레이터 작성
  3. @property 데코레이터
  4. @classmethod와 @staticmethod
← Python Academy(으)로 돌아가기