• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

데코레이터 관련 질문

21.12.13 00:22 작성 조회수 123

1

안녕하세요,
아래와 같이 new_func 없이, func 수행전 print만 추가하는
함수로 copyright 프린트의 목적이 달성될거라 생각하였는데
이렇게 하면,,
 
데코레이터+함수 정의만 하여도 곧바로 실행이 되고,,
smile() 단독 실행시에는 copyright print문이 실행되지 않습니다.
 
 
new_func와 같은 wrapper로 또 한번 감싼후 wrapper를 리턴해야만 의도대로 실행되는 데코레이터의 원리가 궁금합니다..!
 
감사합니다 :)

답변 1

답변을 작성해보세요.

0

안녕하세요!

연말이라 이것저것 때문에 답변이 늦었습니다 ㅠㅠ

사실 데코레이터 문법은 파이썬 내부에서 지원해주는 기능입니다. 문법이라고 생각하시면 좋을 것 같습니다. 그런데 내부적으로 어떻게 동작하는 지에 대해서 설명드리기 위해 안에 new_func을 정의하여 실행하였습니다.

데코레이터에 대해 좀 더 심화적인 개념으로 가면 "클로져"라는 개념이 있습니다.

도서 "코어 자바스크립트"를 인용하면, 클로져란 "어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우 A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상"을 의미합니다.

데코레이터 내부에는 클로져 현상이 일어나게 됩니다. 

조금 심화적인 개념이라 읽어 보시고 의문점들 남겨주시면 답변 하겠습니다!

감사합니다.

즐거운 연말 보내세요!