[Python] 어노테이션을 활용, 데코레이터 사용

KangHo Lee's avatar
Jun 05, 2025
[Python] 어노테이션을 활용, 데코레이터 사용
이 코드는 파이썬 데코레이터의 대표적인 사용 예로, 함수의 실행 시간을 측정하는 데코레이터를 직접 구현한 것입니다.

# decorator.py import time def elapsed(original_func): # 기존 함수를 인수로 받는다. def wrapper(): start = time.time() result = original_func() # 기존 함수를 수행한다. end = time.time() print("함수 수행시간: %f 초" % (end - start)) # 기존 함수의 수행시간을 출력한다. return result # 기존 함수의 수행 결과를 리턴한다. return wrapper @elapsed def myfunc(): print("함수가 실행됩니다.") # decorated_myfunc = elapsed(myfunc) # @elapsed 데코레이터로 인해 불필요한 코드 # decorated_myfunc() myfunc()

🔍 코드 설명

1. elapsed 함수 (데코레이터 함수)

def elapsed(original_func):
  • original_func: 데코레이터가 감쌀 대상 함수입니다 (myfunc).

2. 내부 함수 wrapper()

def wrapper(): start = time.time() # 시작 시간 측정 result = original_func() # 원래 함수 실행 end = time.time() # 끝 시간 측정 print("함수 수행시간: %f 초" % (end - start)) # 실행 시간 출력 return result # 원래 함수의 결과 반환
  • wrapper()는 클로저로 original_func를 기억하고, 감싸서 실행하는 역할을 합니다.

3. 데코레이터 적용

@elapsed def myfunc(): print("함수가 실행됩니다.")
  • 이 줄은 다음과 동일합니다:
    • myfunc = elapsed(myfunc)

4. 실행

myfunc()
  • 실제로 실행되는 함수는 wrapper()입니다.
  • 하지만 wrapper() 안에서 original_func()가 호출되므로 myfunc 본래 기능도 실행됩니다.

🧠 결과 예시

함수가 실행됩니다. 함수 수행시간: 0.000012

✅ 요약

구분
설명
@elapsed
myfuncelapsed(myfunc)으로 감쌈
wrapper()
시간 측정 + 원래 함수 실행
myfunc() 호출
실제로는 wrapper() 실행됨

Share article

devleekangho