728x90
데코레이터는 함수의 실행 전후에 부가적인 로직을 삽입할 수 있도록 해주는 파이썬 고유의 문법입니다. 기존 함수를 수정하지 않고 기능을 확장할 수 있어 코드의 재사용성과 가독성을 높이는 데 매우 유용합니다.
● 데코레이터란?
데코레이터는 다른 함수를 인자로 받아, 그 함수에 기능을 추가한 후 반환하는 고차 함수입니다. @데코레이터_이름
형식으로 함수 위에 사용됩니다.
def decorator_func(func):
def wrapper():
print("함수 실행 전")
func()
print("함수 실행 후")
return wrapper
@decorator_func
def say_hello():
print("Hello!")
say_hello()
위 예제에서 say_hello
함수는 decorator_func
에 의해 래핑되어 실행 전후에 메시지를 출력합니다.
● 인자가 있는 함수에 데코레이터 사용
데코레이터 내부 함수에서 가변 인자(*args
, **kwargs
)를 사용하면 어떤 인자든 처리할 수 있습니다.
def log_args(func):
def wrapper(*args, **kwargs):
print(f"인자: {args}, {kwargs}")
return func(*args, **kwargs)
return wrapper
@log_args
def add(a, b):
return a + b
print(add(3, 5))
● 데코레이터 체이닝
여러 데코레이터를 동시에 적용할 수도 있습니다. 이 경우 가장 가까운 데코레이터부터 순차적으로 적용됩니다.
@decorator1
@decorator2
def my_func():
pass
위 예제는 decorator2
가 먼저 적용되고, 그 결과에 decorator1
이 적용됩니다.
● functools.wraps의 활용
데코레이터를 적용하면 원래 함수의 이름이나 docstring이 변경될 수 있습니다. 이를 방지하려면 functools.wraps
를 사용합니다.
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
● 마무리
데코레이터는 코드의 중복을 줄이고, 실행 흐름을 깔끔하게 제어할 수 있는 고급 기능입니다. 특히 로깅, 권한 검사, 실행 시간 측정 등 다양한 곳에서 자주 활용되므로, 함수형 프로그래밍의 개념과 함께 익혀두는 것이 좋습니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter12. 이터레이터와 커스텀 반복자 만들기 (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter11. 제너레이터 함수와 yield (0) | 2025.05.18 |
[파이썬][중급] Chapter09. 일급 객체와 클로저 (0) | 2025.05.18 |
[파이썬][중급] Chapter08. contextlib와 with문 커스터마이징 (0) | 2025.05.18 |
[파이썬][중급] Chapter07. 예외 처리 패턴과 리팩토링 (0) | 2025.05.18 |