파이썬 가이드 13 데코레이터
데코레이터 (Decorator)
Python 데코레이터는 함수나 메서드를 수정하지 않고 기능을 추가할 수 있게 해주는 파이썬의 강력한 기능입니다. 데코레이터는 다른 함수를 인자로 받는 함수이며, 데코레이트된 함수를 감싸서 추가 기능을 제공한 후 새로운 함수를 반환합니다.
데코레이터의 기본 개념:
- 함수를 인자로 받음: 데코레이터는 하나 이상의 함수를 인자로 받습니다.
- 내부 함수 정의: 데코레이터는 일반적으로 원래 함수를 감싸는 새로운 내부 함수를 정의합니다.
- 기능 추가: 내부 함수 안에서 원래 함수를 호출하기 전이나 후에 추가적인 로직을 실행합니다.
- 내부 함수 반환: 데코레이터는 이 내부 함수를 반환합니다.
사용 예시:
<!-- -->
# 1. 간단한 데코레이터 정의
def my_decorator(func):
def wrapper():
print("함수 실행 전!")
func()
print("함수 실행 후!")
return wrapper
<!-- -->
# 2. 데코레이터 사용 (@데코레이터이름)
@my_decorator
def say_hello():
print("안녕하세요!")
<!-- -->
# 3. 데코레이트된 함수 호출
say_hello()
출력:
함수 실행 전!
안녕하세요!
함수 실행 후!
위 예시에서 my_decorator는 say_hello 함수를 감싸서 say_hello가 호출될 때 "함수 실행 전!"과 "함수 실행 후!"라는 메시지를 추가로 출력하게 합니다. @my_decorator 문법은 say_hello = my_decorator(say_hello)와 동일한 역할을 합니다.
데코레이터의 일반적인 용도:
- 로깅: 함수 호출 시 로그를 남기는 기능 추가.
- 성능 측정: 함수 실행 시간 측정.
- 권한 확인: 특정 함수를 실행하기 전에 사용자 권한 확인.
- 캐싱: 함수의 반환 값을 캐싱하여 중복 계산 방지.
- 유효성 검사: 함수 인자의 유효성 검사.
데코레이터는 코드의 재사용성을 높이고, 함수 본연의 로직과 부가적인 기능을 분리하여 코드를 더 깔끔하고 유지보수하기 쉽게 만듭니다.