본문 바로가기
[Language] - Python

#6. property 데코레이터

by Bebsae 2021. 2. 2.

작업을 하던 도중 처음보는 데코레이터를 발견했다.

 

보통 우리는 객체의 필드를 직접 접근하는 것을 방지하기 위해 해당 필드를 protected나 private 접근제한자를 사용하여 (물론 파이썬에는 접근제한자가 없어 언더바(_) 명명법을 통해 설정하지만..) getter와 setter를 사용하여 접근할 수 있도록 캡슐화(Encapsulation)을 한다. 이러한 과정을 간소화 시켜주는 것이 프로퍼티의 역할이다.

 

-> 특정 인스턴스(객체)의 인스턴스 필드를 직접 접근하는 것을 방지하기 위해 언더바(_)가 붙여진 "접근이 제한된 필드"를 접근하기 위한 역할이다. @property만 정의하면 해당 필드에 대해서는 get만 가능하고, @property와 @.setter까지 정의하면 get, set이 가능해진다.

 

우선 데코레이터를 사용하기 이전에 프로퍼티 객체에 대해 알아보자.

첫 번째 인자(fget)로  getter메소드를 지정할 수 있다. print(p1.color)를 수행할 때, 지정된 getter 메소드(get_color)가 호출된다. 

두 번째 인자(fset)로 setter 메소드를 지정할 수 있다. p1.color = 'red'를 수행할 때, 지정된 getter 메소드(set_color)가 호출된다.

마지막 인자(fdel)로 delete 메소드를 지정할 수 있다.

 

프로퍼티 객체

 

실행결과를 보면 del을 통해 해당 프로퍼티를 삭제했기 때문에 더 이상 접근할 수 없는 모습을 보여준다.

 

실행 결과

C#에는 자동 구현 프로퍼티가 존재하듯이 파이썬에서는 @property 데코레이터를 사용하면 getter를 손쉽게 구현할 수 있다. 그리고 @변수명.setter 를 사용하면 setter를 손쉽게 구현할 수 있다.

 

프로퍼티 데코레이터
실행결과

 

'[Language] - Python' 카테고리의 다른 글

#8. [Tip] if, 삼항연산자가 사용하기 싫을 때  (0) 2021.03.24
#7. zip  (0) 2021.03.24
#5. 덕 타이핑 (Duck Typing)  (2) 2020.12.29
#4. 추상 클래스 (Abstract Class)  (0) 2020.12.28
#3. pickle 모듈  (0) 2020.12.18

댓글