getter, setter는 기본적으로 많이 사용하는 패턴이기 때문에 Property로 미리 만들어 져 있다. Java sprint, ORM 등등..

Pythonic Code

property가 무슨 역할을 하는지 주목하자.

Property(프로퍼티) 사용 장점

  1. 파이써닉한 코드
  2. 변수 제약 설정
  3. Getter, Setter 효과 동등(코드 일관성)
    1. 캡슐화-유효성 검사 기능 추가 용이
    2. 대체 표현(속성 노출, 내부의 표현 숨기기 가능)
    3. 속성의 수명 및 메모리 관리 용이
    4. 디버깅 용이
    5. Getter, Setter 작동에 대해 설계된 여러 라이브러리(오픈소스) 상호 운용성 제공

# Ex1
# Property 활용 Getter, Setter 작성

class SampleA():
    def __init__(self):
        self.x = 0
        self.__y = 0 #private

    @property
    def y(self):
        print('Called get method')
        return self.__y

    @y.setter
    def y(self, value):
        print('Called set method')
        self.__y = value

    @y.deleter
    def y(self):
        del self.__y

a = SampleA()

a.x = 1
a.y = 2

print('Ex1 > y : ', a.y)

# deleter
del a.y
print('Ex1 > ', dir(a))
# Ex2
# Property 활용 제약 조건 추가

class SampleB():
    def __init__(self):
        self.x = 0
        self.__y = 0 #private

    @property
    def y(self):
        # print('Called get method')
        return self.__y

    @y.setter
    def y(self, value):
        # print('Called set method')
        if value < 0 :
            raise ValueError('0 보다 큰 값을 입력하세요.')
        self.__y = value

    @y.deleter
    def y(self):
        del self.__y

b = SampleB()

b.x = 1
b.y = 10

# b.y = -5 # 예외발생