데코레이터(Decorator) 사용법
분야
프로그래밍/소프트웨어 개발
대상자
Python 개발자, 함수 확장 및 메타데이터 관리에 관심 있는 개발자
- 난이도: 초보자~중급자, 기초 문법 이해 필수
핵심 요약
- *데코레이터는 함수를 감싸서 추가 기능을 쉽게 추가하는 구문**
@decorator
문법으로 함수 정의 시 기능 확장 가능functools.wraps
사용 시 원본 함수 메타데이터 유지__call__
,__init__
메서드를 통해 데코레이터 동작 정의
섹션별 세부 요약
- 데코레이터 개념 소개
- 함수를 감싸는 구조로, 원래 함수를 변경하지 않고 기능 추가
@decorator
문법으로 간결하게 사용 가능- 라이브러리에서 자주 사용되며 로깅, 타이밍 측정 등 활용
- 데코레이터 생성 방법
def decorator(func):
로 함수를 감싸는 데코레이터 정의@wraps(func)
로 원본 함수 정보 유지 (예:__name__
,__doc__
)__call__
메서드를 통해 함수 호출 시 동작 정의
- 데코레이터 적용 예시
- 함수에
@decorator
추가 시 자동 감싸짐 functools.wraps
생략 시 메타데이터 손실 가능성- 로깅 데코레이터 예시:
```python
@wraps(func)
def wrapper(*args, **kwargs):
print("Start")
result = func(*args, **kwargs)
print("End")
return result
```
결론
- *데코레이터는 함수 기능 확장에 유용한 패턴**
functools.wraps
사용으로 메타데이터 보존 필수- 로깅, 타이밍 측정 등 실무에서 자주 활용되는 기능
- 함수를 변경하지 않고 추가 기능 적용 가능해 유지보수성 향상
- 사용 전후 메타데이터 확인을 통해 의도한 동작 여부 검증 권장