본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter02. @property와 getter/setter 사용법

by about_IT 2025. 5. 18.
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