데코레이터 (Decorator)
·
[Language] - Python
개요데코레이터를 이해하기 이전에 함수형 프로그래밍에 대한 (함수를 일급시민으로 취급하는) 개념을 먼저 살피고 오면 좋다. 데코레이터는 사전적으로 장식자라는 의미를 가지고 있으며, 장식의 대상이 되는 함수를 데코레이터 함수의 인자로 전달하여 내부적으로 실행방식을 래핑(Wrap)한다. 데코레이터 사용법은 대상이 되는 함수 위에 @데코레이터명 을 쓰면 된다. 예를 들면, @staticmethod, @classmethod, @property 등 다양한 데코레이터들이 있고, 사용자가 임의로 데코레이터를 정의할 수도 있다. 클로저 (Closure)def closure(msg): def wrapper(): print(msg) return wrapperfunc = closure("Hello,..
property 데코레이터
·
[Language] - Python
개요작업을 하던 도중 처음보는 데코레이터를 발견했다.. 보통 우리는 객체의 필드에 직접 접근하는 것을 방지하기 위해 protected나 private 접근제한자를 사용하고, getter와 setter를 통해서만 접근할 수 있도록 캡슐화(Encapsulation)을 한다. 이러한 과정을 간소화 시켜주는 것이 프로퍼티의 역할이다. 사용 예시class Palette: def __init__(self): self.__color = 'blue' def get_color(self): return self.__color def set_color(self, color): self.__color = color def del_color(self): ..
데코레이터 패턴 (Decorator Pattern)
·
[CS] - Design Pattern
데코레이터 패턴은 기능을 동적으로 확장할 때 유용한 패턴이다. 예를 들어보자. A라는 기본기능과 B, C, D라는 추가 기능을 조합할 경우, 경우의 수는 AA + BA + CA + DA + B + CA + B + DA + C + DA + B + C + D 8가지의 경우가 나온다. 그럼 무식하게 메소드만을 활용하여 (상속을 통해) 8가지의 클래스를 정의해서 사용할 것인가? 최악의 경우를 생각해보자. 추가 기능이 1억개면? 답이 없다.. 그래서 메소드가 아닌 인스턴스의 조합을 활용하면 어떨까? 라는 생각에서 나온것이 데코레이터 패턴이다. 첨언을 하자면, DefaultBehavior 클래스는 기본기능이라고 생각하자.public abstract class Base { public abstract v..