728x90
반응형
- 개요
데코레이터는 클로저와 동일하게 함수를 파라미터로 받아서 함수를 반환하는 함수를 의미한다
하지만 데코레이터는 위의 목적말고도 함수와 메서드의 기능을 쉽게 수정하기 위한 수단으로써 사용할 수 있다
데코레이터를 사용하면서 얻을 수 있는 이점은 다음과 같다
- 1) 코드의 가독성 및 명확성 향상
- 2) 높은 재사용성 및 모듈화 -> 공통의 기능을 수행하는 경우 특히 유리함
- 3) 유지보수 용이성 증대
- 4) 기존의 코드를 안전하게 수정
반대로 데코레이터의 단점은 다음과 같다
- 1) 코드의 복잡성 증가
- 2) 특정 기능의 함수의 경우 단일 함수가 더 유리함
- 3) 디버깅이 불편함
- 데코레이터의 선언
import time
def action_timer(func):
def set_timer(*args):
# 함수를 호출한 시간 / 함수 수행 결과 / 함수를 실행한 시간
start_time = time.perf_counter()
result = func(*args)
finish_time = time.perf_counter()
# 순수하게 함수를 수행한 시간 / 함수의 이름 / 함수의 인자
execute_time = finish_time - start_time
name = func.__name__
arg_str = ', '.join(repr(arg) for arg in args)
# 출력문
print(f"함수 : {name}에 인자를 {arg_str}으로 하여 최종 {result}가 반환 / {execute_time:.5f}초 만큼 실행")
return result
return set_timer
위와 같이 action_timer 함수를 outer로, set_timer 함수를 inner로 하여 데코레이터를 선언하였다
함수를 인자로 사용하여 데코레이터를 호출하고 해당 함수를 수행하는데 걸린 시간을 측정한다
- 데코레이터의 사용
...
@action_timer
def sum_all(*args):
time.sleep(10)
return sum(args)
sum_all(50, 40, 30)
함수를 데코레이터의 인자로 사용하기 위해서는 어노테이션을 수식해야 한다
"@+생성한 데코레이터 이름"의 어노테이션을 함수에 수식하여 해당 함수를 데코레이터의 인자로 사용한다
데코레이터의 인자로 사용되는 함수를 호출하면 데코레이터를 수행한다
- 최종 실행 결과

위와 같이 함수를 사용한 시간을 측정하는 것을 확인할 수 있다
728x90
반응형
'Python > 파이썬 심화' 카테고리의 다른 글
| 병행성 - 기본 (2) (0) | 2025.09.14 |
|---|---|
| 병행성 - 기본 (1) (0) | 2025.09.14 |
| 클로저 (2) (0) | 2025.08.21 |
| 클로저 (1) (0) | 2025.08.18 |
| 일급 함수의 특징 (2) (0) | 2025.08.15 |