- 함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
- 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
- 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을때 사용을 한다.
- 또한 데코레이터를 이용해, 반복을 줄이고 메소드나 함수의 책임을 확장한다
아래와 같이 간단한 함수를 정의한 코드가 있다고 하자
def func1():
print("Hello world!")
print()
def func2():
print("Hello everyone!")
print()
def func3():
print("Here is Korea!")
print()
func1()
func2()
func3()
출력
Hello world!
Hello everyone!
Here is Korea!
각각의 함수에 출력전, 후 날짜와 시간을 출력하고 싶다면?
import datetime
def func1():
print(datetime.datetime.now())
print("Hello world!")
print(datetime.datetime.now())
print()
def func2():
print(datetime.datetime.now())
print("Hello everyone!")
print(datetime.datetime.now())
print()
def func3():
print(datetime.datetime.now())
print("Here is Korea!")
print(datetime.datetime.now())
print()
단순히 이렇게 반복해도 된다.
하지만 함수가 엄청 많아진다면? 직접 추가하는 것은 매우 번거로운 일이다
이를 도와줄 수 있는게 Decorator
이다.
위의 단순 작업을 decorator로 처리한 아래 예제를 보자
import datetime
def datetime_decorator(func):
def decorated():
print("Start!")
func()
print(datetime.datetime.now())
print()
return decorated
@datetime_decorator
def func1():
print("Hello world!")
@datetime_decorator
def func2():
print("Hello everyone!")
@datetime_decorator
def func3():
print("Here is Korea!")
func1()
func2()
func3()
출력
Start!
Hello world!
2021-07-21 10:55:40.304144
Start!
Hello everyone!
2021-07-21 10:55:40.304282
Start!
Here is Korea!
2021-07-21 10:55:40.304495