파이썬 데코레이터 :: 함수 기능 확장의 강력한 도구
데코레이터란?
파이썬 데코레이터는 함수의 기능을 추가하거나 변경하는 데 사용되는 도구이다. 함수 앞에 @ 기호와 함께 데코레이터 함수를 작성하여 적용한다. 데코레이터 함수는 원래 함수를 입력으로 받고, 감싸거나 수정된 함수를 반환한다.
데코레이터 작동 방식
데코레이터는 다음과 같은 단계로 작동한다.
- 데코레이터 함수 호출 : 데코레이터 함수가 @ 기호와 함께 함수 앞에 작성되면 호출된다.
- 원래 함수 전달 : 데코레이터 함수는 원래 함수를 인수로 받는다.
- 감싸기 또는 수정 : 데코레이터 함수는 원래 함수를 감싸거나 수정하는 로직을 실행한다.
- 수정된 함수 반환 : 데코레이터 함수는 감싸거나 수정된 함수를 반환한다.
- 실행 : 반환된 함수는 일반적인 함수와 동일하게 호출되고 실행된다.
데코레이터 활용 사례
데코레이터는 다양한 용도로 활용될 수 있다. 대표적인 활용 사례는 다음과 같다.
- 함수 로그 기록 : 함수 실행 전후에 로그 메시지를 출력하는 데코레이터를 작성하여 함수 실행 정보를 기록할 수 있다.
- 인증 및 권한 부여 : 함수 실행을 특정 사용자에게만 허용하거나 사용자 권한에 따라 기능을 제한하는 데코레이터를 작성하여 보안을 강화할 수 있다.
- 캐싱 : 함수 실행 결과를 캐싱하여 동일한 입력에 대해 함수를 반복적으로 호출하지 않도록 할 수 있다.
- 측정 및 성능 분석 : 함수 실행 시간을 측정하거나 리소스 사용량을 추적하는 데코레이터를 작성하여 함수 성능을 분석할 수 있다.
- 유틸리티 함수 작성 : 함수에 매개변수 검증, 예외 처리, 반환값 포맷팅 등을 수행하는 데코레이터를 작성하여 코드 간결성을 높일 수 있다.
데코레이터 작성 예시
다음은 로그 기록 데코레이터 작성 예시다.
def log_function(function):
def wrapper(*args, **kwargs):
print(f"함수 '{function.__name__}' 실행 시작")
result = function(*args, **kwargs)
print(f"함수 '{function.__name__}' 실행 종료")
return result
return wrapper
@log_function
def add_numbers(a, b):
"""두 수를 더합니다."""
return a + b
print(add_numbers(3, 4))
데코레이터 활용 팁
- 데코레이터는 함수 기능을 확장하는 강력한 도구이지만, 남용하면 코드 가독성을 저하시킬 수 있다. 따라서 필요한 경우에만 사용하고, 단순하고 명확하게 작성하는 것이 중요하다.
- 여러 개의 데코레이터를 함께 사용할 수 있다. 이 경우 데코레이터는 안쪽에서 바깥쪽 순으로 실행된다.
- 데코레이터를 사용하면 함수 서명이 변경될 수 있으므로 주의해야 한다.
- 데코레이터에 대한 자세한 내용은 파이썬 공식 문서를 참고.
반응형
'개발 (Development) > Python' 카테고리의 다른 글
| [Python] 엑셀 파일 간 데이터 비교 (여러 시트일 때) (0) | 2025.01.12 |
|---|---|
| [Python] 패키지 설치 SSL Error 해결 (0) | 2025.01.05 |
| [Python] try, except 문에서 Exception이 여러 개일 경우 (0) | 2024.04.17 |
| [Python] List Comprehension (0) | 2024.04.17 |
| [Python] 리눅스 환경에서 윈도우 환경으로 파일 저장 (SMB 프로토콜) (0) | 2024.04.12 |