개발자 블로그

[윤성우의 열혈 파이썬 중급편] - 18. 프로퍼티 본문

파이썬/윤성우의 열혈 파이썬 중급편

[윤성우의 열혈 파이썬 중급편] - 18. 프로퍼티

hayongwoon 2022. 5. 11. 00:32

객체가 갖는 값에 직접 접근하는 것은 쉽게 오류를 범할 수 있으므로 지양해야한다 때문에 객체의 변수에 직접 접근을 하기보다 메소드를 통해 접근하는 것이 안전하다!

하지만, 메소드를 통해 접근을 하다보면 코드가 다소 복잡해 보일 수 있다. 따라서 우리는 안전성간결함 이 두마리 토끼를 잡고자 프로퍼티라는 개념을 배워야한다.

 

메소드를 통한 객체의 값에 접근

객체의 어트리뷰트의 직접 접근을 막는 방법으로 변수 앞에 __를 붙였다. 따라서 우리느 메소드를 통해 변수에 접근을 해야한다. 아래 두개의 메소드를 통해 값을 저장 및 참조하도록 하자!

 

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에 저장

 

*이렇게 프로퍼티를 통해 객체가 갖는 값에 (메소드를 통한)접근하는 방법을 살펴보았다. 프로퍼티 객체를 생성하고 게터와 세터 메소드를 등록하면 코드의 간결함도 챙길 수 있고, 변수에 직접 접근도 그대로 유지할 수도 있다. 따라서 우리는 안전성과 간결함을 프로퍼티를 통해 동시에 얻을 수 있었다.