개발자 블로그
[윤성우의 열혈 파이썬 중급편] - 18. 프로퍼티 본문
객체가 갖는 값에 직접 접근하는 것은 쉽게 오류를 범할 수 있으므로 지양해야한다 때문에 객체의 변수에 직접 접근을 하기보다 메소드를 통해 접근하는 것이 안전하다!
하지만, 메소드를 통해 접근을 하다보면 코드가 다소 복잡해 보일 수 있다. 따라서 우리는 안전성과 간결함 이 두마리 토끼를 잡고자 프로퍼티라는 개념을 배워야한다.
메소드를 통한 객체의 값에 접근
객체의 어트리뷰트의 직접 접근을 막는 방법으로 변수 앞에 __를 붙였다. 따라서 우리느 메소드를 통해 변수에 접근을 해야한다. 아래 두개의 메소드를 통해 값을 저장 및 참조하도록 하자!
1) getter(게터)
값 꺼내기, 이러한 성격의 메소드를 게터라한다.
2) setter(세터)
값 수정하기, 이러한 성격의 메소드를 세터라고 한다.

n2의 값과 n3 값을 불러와 setn 을 통해 수정! 다소 복잡해 보인다. 이를 n1.n = n2.n + n3.n 처럼 간결하게 할 수는 없는가...
이 때, 프로퍼티 객체를 사용하여 위 함수를 등록시키면 된다. 게터와 세터로
프로퍼티에 등록하는 방법은 몇가지 방법이 있다.
1) n = property(getn, setn). # 변수 n에 property 객체 저장
2) 게터 함수 정의하고 프로퍼티 객체 생성 및 등록, 세터 함수 정의 후 등록
2-1) 메소드 네임을 다르게!
#게터로 쓸 함수 정의
n = n.getter(getn) # property 객체를 생성함과 동시에 게터 함수 등록
#세터로 쓸 함수 정의
n = n.setter(setn) # 세터 함수 등록
2-2) 메소드 네임을 같게 등록할 것이기 때문에 같게 하는 경우도 있음.
def pm(self):
~~~
n = n.getter(pm) # property 객체를 생성함과 동시에 게터 함수 등록
def pm(self, n):
~~~
n = n.setter(setn) # 세터 함수 등록
**이 방법에서 함수(메소드) 이름을 등록할 것이기 때문에 그냥 두 메소드 이름을 pm(property method) 이렇게 하나로 통일해도 상관없다.
3) 데코레이터를 활용한 프로퍼티 객체 생성 및 등록

@property -> property 객체를 생성하면서 이어서 등장하는 메소드를 게터로 지정!
그리고 이렇게 생성된 property 객체를 메소드 이름인 n에 저장
@n.setter -> 이어서 등장하는 메소드를 n에 저장된 property 객체의 세터로 등록!
그리고 이렇게 생성된 property 객체를 메소드 이름인 n에 저장
*이렇게 프로퍼티를 통해 객체가 갖는 값에 (메소드를 통한)접근하는 방법을 살펴보았다. 프로퍼티 객체를 생성하고 게터와 세터 메소드를 등록하면 코드의 간결함도 챙길 수 있고, 변수에 직접 접근도 그대로 유지할 수도 있다. 따라서 우리는 안전성과 간결함을 프로퍼티를 통해 동시에 얻을 수 있었다.
'파이썬 > 윤성우의 열혈 파이썬 중급편' 카테고리의 다른 글
[윤성우의 열혈 파이썬 중급편] - 20. 데코레이터 (0) | 2022.05.17 |
---|---|
[윤성우의 열혈 파이썬 중급편] - 19. 네스티드 함수와 클로져 (0) | 2022.05.17 |
[윤성우의 열혈 파이썬 중급편] - 17. __slots__의 효과 (0) | 2022.05.10 |
[윤성우의 열혈 파이썬 중급편] - 16. 정보 은닉과 __dict__ (0) | 2022.05.09 |
[윤성우의 열혈 파이썬 중급편] - 15. 연산자 오버로딩 (0) | 2022.05.07 |