데코레이터
데코레이터
테코레이터는 함수의 앞뒤로 부가적인 기능을 넣어주고 싶을 때 사용한다. 대표적으로 로깅이나 권한(로그인체크) 확인에 사용된다.
- 클로저를 이용해서 생성
- 적용하고 싶은 함수앞에 @데코레이터
데코레이터 생성하기
예를 들어 함수가 시작되었는지 함수가 종료되었는지 로그를 남기고 싶다고 하자. 아래와 같이 함수를 작성하면 새로운 함수를 작성할 때마다 print()문을 사용해야 한다.
def print_hello():
print('함수 시작')
print('Hello')
print('함수 종료')
def print_bye():
print('함수 시작')
print('Bye')
print('함수 종료')
>>> print_hello()
함수 시작
Hello
함수 종료
>>> print_bye()
함수 시작
Bye
함수 종료
함수 안에서의 중복을 제거하는 역할을 데코레이터가 할 수 있다. 이제 함수의 시작과 끝을 넣어주는 데코레이터를 만들어본다.
# 데코레이터 생성하기
def logger(func):
def wrapper(arg):
print("함수 시작")
func(arg) # 함수 실행
print("함수 끝")
return wrapper
@logger
def print_hello(name):
print("hello", name)
@logger
def print_bye(name):
print("bye", name)
이렇게 하면 @logger는 데코레이터를 먼저 찾고 print_hello()를 func으로 넘겨준다.
>>> print_hello('SYJ')
함수 시작
hello SYJ
함수 끝
>>> print_bye('SYJ')
함수 시작
bye SYJ
함수 끝