작업을 하던 도중 처음보는 데코레이터를 발견했다.
보통 우리는 객체의 필드를 직접 접근하는 것을 방지하기 위해 해당 필드를 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 |
댓글