데코레이터란?
파이썬에서 제공하는 기능이다. 어떤 함수를 장식(decorate)한다고 해서 붙여진 이름.
데코레이터를 쓰는 이유는 기존 함수를 수정하지 않으면서 추가 기능을 구현하거나 복잡한 함수를 간단하게 하기 위함이다.
클로져란?
클로져(closures)란 inner function을 return값으로 반환하는 것을 뜻한다.
위 코드에서 another이라는 변수는 print_msg함수이다. (이는 파이썬에서 함수는 일급 객체이기 때문에 가능하다.)
another함수가 호출되면 print_msg함수가 호출되고 내부 pinter함수를 반환하는데, 이런걸 클로져라고 부른다.
클로져는 내부 함수가 메모리에 존재하지 않는 경우에도, 호출될 때 주변 환경을 기억한다. 그래서 printer에 msg값을 넘겨주지 않아도 print(msg)문을 수행할 수 있다.
데코레이션 예제 : 복잡한 클로져를 간단하게
위 코드를 보면 1. printer함수를 실행시킨다. 그런데 printer함수가 데코레이터 함수이므로 2. star함수가 실행된다. 이때 func 파라미터로 printer함수가 들어간다. 3. star함수는 inner가 return되므로 inner함수가 실행된다. 이때 msg는 *args인자로 받게 된다. 4. inner함수에서는 print 구문이 실행된 후, func함수가 수행된다. 5. 이제 printer함수가 수행되고 msg가 출력되게 된다.
'파이썬' 카테고리의 다른 글
(부스트코스) 로깅 설정 - configparser 와 argparser (0) | 2023.01.27 |
---|---|
로깅 레벨 (0) | 2023.01.27 |
(부스트코스) 인공지능(AI) 기초 다지기 - 가변인자 asterisk(*) unpacking (0) | 2023.01.24 |
(부스트코스) 인공지능(AI) 기초 다지기 - iterator와 generator 개념 (0) | 2023.01.24 |
(부스트코스) 인공지능(AI) 기초 다지기 - list comprehension 2 dim 원리 필기 (0) | 2023.01.24 |