파이썬에서는 기존의 함수를 변경하지 않고도 기능을 확장할 수 있는 도구들이 있습니다.
그중 가장 많이 사용되는 개념이 바로 **래퍼(wrapper)**와 **데코레이터(decorator)**입니다.
1. 래퍼(Wrapper)란?
래퍼는 기존 함수를 감싸는 함수입니다.
def wrapper(func):
def inner(*args, **kwargs):
print("전처리 작업")
result = func(*args, **kwargs)
print("후처리 작업")
return result
return inner
이처럼 func를 감싸는 함수(inner)가 래퍼입니다.
이 구조는 데코레이터의 기본 형태이기도 합니다.
2. 데코레이터(Decorator)란?
데코레이터는 **함수를 꾸며주는 문법적 설탕(Syntactic Sugar)**입니다.
사실상 데코레이터는 래퍼 함수의 간편한 표현 방식입니다.
@wrapper
def greet(name):
print(f"Hello, {name}!")
위 코드는 다음과 동일합니다:
greet = wrapper(greet)
즉, @wrapper는 greet 함수를 wrapper(greet)로 감싸주는 역할을 합니다
언제 쓰나요?
- 로깅 추가
- 실행 시간 측정
- 권한 검사
- 예외 처리 감싸기
같은 공통적인 기능을 여러 함수에 적용할 때, 데코레이터는 매우 유용합니다.
3. 실용 예시: 실행 시간 측정 데코레이터
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 실행 시간: {end - start:.2f}초")
return result
return wrapper
@timer
def compute():
time.sleep(1)
return "완료!"
compute()
정리하면
| 개념 | 설명 |
| 래퍼 | 함수의 전후 로직을 감싸는 함수 |
| 데코레이터 | 래퍼를 함수에 적용하는 문법 표헌 |
래퍼는 개념, 데코레이터는 표현입니다.
복잡한 코드를 깔끔하게 확장하려면 데코레이터를 활용해보세요
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| ()의 진짜 의미: 함수와 실행, 객체와 결과의 차이 (1) | 2025.06.22 |
|---|---|
| 파이썬 클로저(Closure): 변수와 스코프 개념 정리 (0) | 2025.06.22 |
| 기능을 코드로 추상화 개념 (0) | 2025.06.22 |
| 반복 가능한 객체와 흐름 제어 키워드 (return, break, continue, pass)의 동작 방식 정리 (0) | 2025.06.22 |
| return, break, continue, pass 그리고 finally의 관계 완벽 정리 (0) | 2025.06.22 |