본문 바로가기

Decorator3

# 18. 데코레이터 (Decorator) 이번 포스트는 갑자기 프로퍼티 포스트에 급 어그로가 끌려서 데코레이터가 무엇이냐고 묻는 분들을 위해 간략하게 작성한다. 데코레이터의 사전적인 의미는 장식자이다. 무엇을 장식할까? 바로 함수를 장식한다. 데코레이터 사용법은 대상이 되는 함수 위에 @데코레이터명 을 쓰면 된다. 예를 들면, @staticmethod, @classmethod, @property 등 다양한 데코레이터들이 있고, 사용자가 임의로 데코레이터를 정의할 수도 있다. 데코레이터가 무엇인지 코드로 직접 이해해보자. def say_hi(): print("i'm function") print('hi') def say_hello(): print("i'm function") print('hello') def say_bye(): print("i'm.. 2021. 11. 9.
#6. property 데코레이터 작업을 하던 도중 처음보는 데코레이터를 발견했다. 보통 우리는 객체의 필드를 직접 접근하는 것을 방지하기 위해 해당 필드를 protected나 private 접근제한자를 사용하여 (물론 파이썬에는 접근제한자가 없어 언더바(_) 명명법을 통해 설정하지만..) getter와 setter를 사용하여 접근할 수 있도록 캡슐화(Encapsulation)을 한다. 이러한 과정을 간소화 시켜주는 것이 프로퍼티의 역할이다. -> 특정 인스턴스(객체)의 인스턴스 필드를 직접 접근하는 것을 방지하기 위해 언더바(_)가 붙여진 "접근이 제한된 필드"를 접근하기 위한 역할이다. @property만 정의하면 해당 필드에 대해서는 get만 가능하고, @property와 @.setter까지 정의하면 get, set이 가능해진다. .. 2021. 2. 2.
#2. 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴은 기능을 동적으로 확장할 때 유용한 패턴이다. 예를 들어보자. A라는 기본기능과 B, C, D라는 추가 기능을 조합할 경우, 경우의 수는 A A + B A + C A + D A + B + C A + B + D A + C + D A + B + C + D 8가지의 경우가 나온다. 그럼 무식하게 메소드만을 활용하여 (상속을 통해) 8가지의 클래스를 정의해서 사용할 것인가? 최악의 경우를 생각해보자. 추가 기능이 1억개면? 답이 없다.. 그래서 메소드가 아닌 인스턴스의 조합을 활용하면 어떨까? 라는 생각에서 나온것이 데코레이터 패턴이다. 첨언을 하자면, DefaultBehavior 클래스는 기본기능이라고 생각하자. public abstract class Base { public abstract .. 2020. 12. 28.