728x90
객체지향 프로그래밍에서 클래스 내부 데이터를 외부에서 안전하게 접근하거나 수정하려면 getter, setter 메서드를 정의하는 방식이 자주 사용됩니다. 파이썬에서는 이를 더 우아하게 처리할 수 있는 데코레이터 @property
를 제공합니다.
● @property란?
@property는 클래스의 메서드를 속성처럼 사용할 수 있도록 해주는 내장 데코레이터입니다. 외부에서는 일반 변수처럼 접근하지만 내부적으로는 함수 호출이 일어나므로 캡슐화와 유효성 검사를 동시에 처리할 수 있습니다.
class Product:
def __init__(self, price):
self._price = price
@property
def price(self):
return self._price
위 예제에서 product.price
처럼 속성 접근을 해도 실제로는 price()
메서드가 호출됩니다.
● setter 메서드 정의
속성 값을 설정할 수 있도록 하려면 같은 이름의 메서드 위에 @속성명.setter
데코레이터를 사용합니다.
@price.setter
def price(self, value):
if value < 0:
raise ValueError("가격은 음수일 수 없습니다.")
self._price = value
이제 product.price = 10000
처럼 대입하면 setter 메서드가 자동으로 호출되어 내부 유효성 검사가 적용됩니다.
● 읽기 전용 속성 만들기
setter를 정의하지 않으면 해당 속성은 읽기 전용이 됩니다. 이는 외부에서 값을 변경할 수 없게 만들어 안전한 상태 유지에 유리합니다.
예를 들어 다음처럼 정의하면 price는 읽을 수만 있고 수정은 불가능합니다.
class Item:
def __init__(self, id):
self._id = id
@property
def id(self):
return self._id
● 요약
@property
를 사용하면 메서드를 속성처럼 사용할 수 있음- 데이터 보호 및 유효성 검사가 필요한 경우 getter/setter 정의 권장
- 읽기 전용 속성은 setter를 생략하여 구현
● 마무리
@property는 객체지향 설계에서 데이터 캡슐화를 강화하는 매우 유용한 기능입니다. 사용자 정의 클래스에서 속성 접근을 제어하고자 할 때 꼭 활용해보시기 바랍니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter06. 사용자 정의 예외 클래스 (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter05. 매직 메서드(__str__, __eq__, __lt__ 등) (0) | 2025.05.18 |
[파이썬][중급] Chapter04. 다중 상속과 MRO 이해 (0) | 2025.05.18 |
[파이썬][중급] Chapter03. 추상 클래스와 ABC 모듈 (0) | 2025.05.18 |
[파이썬][중급] Chapter01. 클래스 변수와 인스턴스 변수 차이 (0) | 2025.05.18 |