지난 번 Posting에서도 예고 했듯이 이번 posting에는 decorator에 대해 정리하고자 한다. 일급 함수를 바탕으로 지난 posting에서는 closure 함수에 대해 정리하였고 이번에는 decorator이다. 그럼 시작해보도록 하겠다.
Decorator란 어떠한 함수를 인자로 받아 꾸며준 후 다시 함수로 return 하는 함수를 말한다.
꾸며준다는 의미는 함수의 앞, 뒤로 특정한 로직을 추가하는 행동을 의미한다.
따라서 decorator가 적용된 함수가 실행되기 전 decorator 함수가 먼저 실행이 된다.
단, decorator는 적용하는 함수 내부의 직접적인 수정이나 로직의 변환을 가할 수 없다.
Decorator는 closure함수와 비슷하나, 함수를 인자로 받는다는 차이가 있다.
형태는 적용하려는 함수 위에 @decorator
형태로 적용한다.
Decorator의 형태는 어떻게 될까?
위에서는 closure함수와 비슷하다고 하였고, 적용되는 함수의 위에 사용한다고 하였는데 예시 code를 통해 알아보고자 한다.
def decorator(func):
def wrapper_func(*args, **kwargs):
#추가 logic
return func(*args, **kwargs) # 꾸며질 func를 return
return wrapper_func # wrapper_func를 return
@decorator
def example():
print("This is example code of decorator")
def decorator(func):
def wrapper_func(*args, **kwargs):
print("This is first time to meet you")
return func(*args, **kwargs) # 꾸며질 func를 return
return wrapper_func # wrapper_func를 return
@decorator
def sayHello(name):
print(f"Hello! {name}")
sayHello("Drageon")
#Result
This is first time to meet you
Hello! Drageon
위 형식과 같이 사용된다. 그럼 왜 Decorator를 사용할까? Decorator의 장, 단점에 대해서 알아보자
📖 출처 :
이번 posting에서는 decorator에 대해 정리해 보았다. Decorator는 일급함수를 거치고 closure를 거친 좀 더 복잡한 내용이었던 것 같다. 하지만 파면 팔 수록 재미있다. 다음 posting에서는 generator에 대해 정리할 것이다.