[Python] - 데코레이터(Decorator)

김진수·2020년 12월 11일
1

Python

목록 보기
4/8
post-thumbnail

🖍 데코레이터(Decorator)란?

데코레이터란 무엇일까요? 사전적 의미로는 "장식가" 또는 "인테리어 디자이너" 등의 의미를 가지고 있습니다. 이름 그대로, 자신의 방을 예쁜 벽지나 커튼으로 장식을 하듯이, 기존의 코드에 여러가지 기능을 추가하는 파이썬 구문이라고 생각하시면 됩니다. 그리고 데코레이터를 이해하시기 위해서는 클로저(Closure)와 일급함수(First Class)개념을 알고 계셔야 합니다. 데코레이터(Decorator)에 장점과 단점은

장점

  • 중복 제거, 코드 간결
  • 클로저(Closure)보다 문법 간결
  • 조합해서 사용 용이
단점
  • 디버깅 어려움
  • 에러의 모호함

예제를 보면서 설명하겠습니다.

🖌 데코레이터(Decorator) 예제

🖋클로저(Closure) 구현
결과값

  • closure_1변수에 부모함수(closure(display))를 저장합니다.
  • closure_1를 호출하면 return값인 중첩함수(averager)를 실행합니다.
  • print(display())가 실행됩니다.
  • -> display는 부모함수(closure)의 매개변수이므로 즉 자유영역(Free variable)에 포함됩니다. 그러므로 중첩함수(averager)에서 사용할 수 있습니다. 그렇기에 display()함수가 실행이 되는 것입니다.
  • display()실행 -> "Hansome boy" 출력

근데 이 방법은 부모함수(closure)를 변수에 저장해서 사용해야 하는 번거로움이 있습니다. 그러나 데코레이터(Decorator)를 사용하면 좀 더 간결하게 사용할 수 있습니다.

🖊데코레이터(Decorator) 구현

결과값

위에 클로저(Closure)와는 비슷하면서 다른것은 display위에 @closure를 구현한 것입니다. 그렇게하면 따로 부모함수(closure)를 저장하여 사용하지 않아도 됩니다.

  • display() 실행
  • @closure에 의해 display가 부모함수인 closure 매개변수가 되고, closure가 실행됩니다.
  • 부모함수(closure)의 return값인 중첩함수(averager)를 반환되고 실행된다.
  • print(display())실행됩니다.
  • ->display가 부모함수(closure)의 매개변수이므로 자유영역(Free variable)에 포함되고, 중첩함수(averager)에서 사용가능합니다.
  • display()실행
  • -> "Hansome boy" 출력

결과값을 보면 클로저(Closure)와 데코레이터(Decorator)이 같은 것을 확인 할 수있습니다. 즉, 데코레이터(Decorator)를 사용하면 위에서 설명한대로 중복제거 및 코드간결, 클로저(Closure)보다 문법간결합니다.

profile
백엔드 개발자

0개의 댓글