Python/파이썬 오픈소스 배포

Getter 메서드와 Setter 메서드

monstro 2025. 7. 1. 01:25
728x90
반응형

- 개요

클래스의 멤버 변수에 직접 접근하는 것은 매우 위험한 일이다

따라서 프로퍼티를 사용하여 멤버 변수에 간접적으로 접근하게 된다

파이썬에서 프로퍼티를 사용하면 다음의 이점을 얻을 수 있다

  • 변수에 제약을 설정할 수 있다
  • 캡슐화를 이끌어낼 수 있다
  • Pythonic한 코드를 작성할 수 있다

위와 같이 프로퍼티를 만들게 되면 Getter 메서드를 통해 프로퍼티의 값을 가져오고

Setter 메서드를 통해 프로퍼티의 값을 설정할 수 있다

이때 어노테이션을 사용하여 Getter / Setter 그리고 메모리 관리를 위한 Deleter를 간단하게 생성할 수 있다

 

- 프로퍼티를 사용하여 구현한 클래스

class SampleA:
    def __init__(self):
        self.x = 0
        self._y = 0

    # getter
    @property
    def y(self):
        return self._y

    # setter
    @y.setter
    def y(self, value):
        if value < 0:
            raise ValueError("값은 0보다 커야 합니다.")
        self._y = value

    # deleter
    @y.deleter
    def y(self):
        del self._y

 

생성자인 Init에서 public 변수 xprotected 변수 y를 생성하였다

@property 어노테이션을 사용하여 Getter 메서드를,

@프로퍼티명.setter 어노테이션을 사용하여 제약이 설정된 Setter 메서드를,

@프로퍼티명.deleter 어노테이션을 사용하여 Deleter 메서드를 생성하였다

 

Getter 메서드프로퍼티의 값을 간접적으로 가져오는 역할을 수행한다

Setter 메서드프로퍼티의 값을 설정하는 역할을 수행한다

이때 제약조건을 주어 원하는 방향으로 프로퍼티를 설정할 수 있다

마지막으로 Deleter 메서드프로퍼티를 제거하여 메모리의 낭비를 최소화한다

 

- 클래스의 사용

1) Getter와 Setter의 호출

a = SampleA()

print(f"Set하기 이전, 단순 Get한 값 : x = {a.x}, y = {a.y}")

a.x = 1
a.y = 5

print(f"Set한 이후 값 : x = {a.x}, y = {a.y}")

 

위와 같이 코드를 구성하여 사용할 수 있다

 

 

실행 결과는 위와 같다

 

2) Deleter의 호출

...

del a.y
print(f"x : {a.x}, y : {a.y}")

 

이번에는 Deleter를 호출하여 y 프로퍼티를 삭제하였다

 

 

실행 결과는 위와 같다

 

3) 의도적인 Setter의 제약조건 위배

...

a.x = 1
a.y = -5

print(f"Set한 이후 값 : x = {a.x}, y = {a.y}")

 

마지막으로 Setter를 호출하고 0보다 작은 값을 넘겨주었다

 

 

위와 같이 예외가 발생한 것을 확인할 수 있다

728x90
반응형