2.4 KiB
2.4 KiB
데코레이터
데코레이터는 파이썬에서 함수나 클래스에 추가적인 기능을 부여하는 강력한 도구입니다. 마치 함수나 클래스를 장식하듯이, 기존의 기능을 변경하거나 확장할 수 있죠.
데코레이터는 실제로 함수를 인자로 받아 새로운 함수를 반환하는, 고차 함수(higher-order function)입니다. 이렇게 반환된 새로운 함수는 원래 함수를 감싸면서 추가적인 작업을 수행할 수 있습니다.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("함수 실행 전")
result = func(*args, **kwargs)
print("함수 실행 후")
return result
return wrapper
@my_decorator
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
위 예시에서 @my_decorator 부분이 greet 함수에 데코레이터를 적용하는 부분입니다. my_decorator 함수는 greet 함수를 인자로 받아 새로운 함수 wrapper를 반환합니다. 이 wrapper 함수는 greet 함수를 호출하기 전후에 추가적인 작업을 수행합니다.
활용
- 로깅: 함수의 실행 시간, 입력값, 출력값 등을 로그에 기록합니다.
- 캐싱: 함수의 결과를 캐시하여 동일한 입력에 대해 반복적인 계산을 방지합니다.
- 인증: 함수 호출 권한을 검사합니다.
- 예외 처리: 예외 발생 시 특정 작업을 수행합니다.
- 프로파일링: 함수의 성능을 측정합니다.
데코레이터의 구현
def my_decorator(func):
def wrapper(*args, **kwargs):
# 데코레이터가 수행할 작업
# ...
result = func(*args, **kwargs)
# 데코레이터가 수행할 작업
return result
return wrapper
- @decorator_name 문법: 함수 위에 붙여 데코레이터를 적용합니다.
- wrapper 함수: 실제로 호출되는 함수입니다.
- *args, **kwargs: 가변 인자를 사용하여 다양한 형태의 함수에 적용할 수 있도록 합니다.
더 알아보기
- 클래스 데코레이터: 클래스에도 데코레이터를 적용할 수 있습니다.
- 매개변수가 있는 데코레이터: 데코레이터 함수에 인자를 전달하여 기능을 커스터마이징할 수 있습니다.
- 함수 데코레이터: 함수를 반환하는 함수를 사용하여 더 복잡한 기능을 구현할 수 있습니다.