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