이번 1차프로젝트에서 로그인에 대한 인가를 구현하기 위해 템플렛을 보고 어찌어찌 구현한 로그인 데코레이터가 충분하지 못해, 데코레이터에 대해 좀더 깊이 공부해보기로 했다.
Definition:
장식하다, 꾸미다라는 뜻으로 함수를 장식해서 사용하기 때문에 데코레이터이다. 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용한다.(ex, 로그인 인가 등) "@"로 작성된 함수를 호출한다.
위 두개의 코드를 보면 출력값은 같지만, 호출 명령어가 다르다.
1번:
def hello():
print('hello')
def world():
print('world')
trace_hello = trace(hello)
trace_hello()
trace_world = trace(world)
trace_world()
2번:
@trace
def hello():
print('hello')
@trace
def world():
print('world')
hello()
world()
이유는 두번째 코드에 @
를 사용해 이미 함수 위에 데코레이터를 씌워주었기 때문에 출력하는 함수 값만 입력하면 데코레이터 함수를 자동적으로 인식하기 때문이다.