• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문입니다

20.11.17 21:18 작성 조회수 121

1

데코레이터의 로직이 함수의 어떤부분에 들어가는지 궁금합니다  

답변 1

답변을 작성해보세요.

1

파이썬 데코레이터는 단순히 데코레이터의 로직이 함수 어느 부분에 위치해서 실행되는 단순한 동작방식은 아닙니다. 사람이 이해하기에 그렇게 쉽게 이해할  수 있게 설계되어있을뿐 실제 동작하는 방식은 그보다 훨씬 복잡합니다.

def func_outer(msg):
    def func_inner():
        return "데코레이터 메세지 : {}".format(msg)
    return func_inner


= func_outer("test")
print(dir(t))

위와 같이 데코레이터 함수를 정의하고 이를 t 라는 변수에 할당하여 dir(t) 를 출력해보면

위외 이미지에서 처럼 t 의 내부 함수들을 확인해 볼 수 있습니다. 여기서 __closure__ 라는 애가 실제 중요한 역할을 하는데 이 클로저가 어떻게 동작하는지 그리고 클로저와 데코레이터는 무슨 차이가 있는지 공부를 해보시면 좀 더 도움이 되지 않을까 생각됩니다.

print(dir(t.__closure__[0]) 을 출력해서 __closure__ 의 구성을 살펴보면 위 이미지 처럼 클로저가 어떻게 구성이 되어있는지 확인할 수 있고 cell_contents 라는 변수에 우리가 할당한 함수명이 임시 보관되어있는 것도 확인해볼 수 있습니다. 이를 보아 데코레이터에 정의한 함수가 수행되고 이렇게 인자로 넘어온 함수명을 cell_contents 에 보관하였다가 실행되어야 하는 순간에 이를 호출하고 리턴하는 방식으로 동작할거라 대강 유추가 가능합니다.

물론 더 정확하게 알기 위해선 실제 소스코드를 보고 분석해보는 방법이 가장 좋습니다.