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 변수 x와 protected 변수 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
반응형