"코드를 수정하지 않고 기능을 추가할 수 있다면 얼마나 좋을까요?"
파이썬에서는 데코레이터(Decorator)라는 기능을 통해
함수나 메서드에 손쉽게 새로운 동작을 덧붙일 수 있습니다.
처음 보면 다소 낯설 수 있지만,
원리를 이해하면 굉장히 유용하게 사용할 수 있습니다.
오늘은
✔ 데코레이터의 기본 개념
✔ 간단한 데코레이터 만들기
✔ 인자 있는 함수에 데코레이터 적용하기
✔ 데코레이터 실전 예시
까지 차분히 설명해드리겠습니다.
파이썬 데코레이터 쉽게 이해하기
1. 데코레이터란 무엇인가?
데코레이터는 "함수를 꾸며주는 함수"입니다.
기존 함수를 수정하지 않고, 기능을 추가하거나 수정할 수 있습니다.
기본 개념:
@데코레이터_함수
def 원래_함수():
pass
@데코레이터_함수 구문은
원래_함수 = 데코레이터_함수(원래_함수)
와 같은 의미입니다.
2. 가장 간단한 데코레이터 만들기
간단한 예제를 통해 데코레이터의 구조를 살펴봅시다.
예시
def my_decorator(func):
def wrapper():
print("함수 실행 전 작업")
func()
print("함수 실행 후 작업")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
실행 결과
함수 실행 전 작업
Hello!
함수 실행 후 작업
- my_decorator는 say_hello를 감싸고, 실행 전후에 추가 작업을 합니다.
3. 인자 있는 함수에 데코레이터 적용하기
함수에 인자가 있을 때도 데코레이터를 적용할 수 있습니다.
이 경우 *args, **kwargs를 사용하면 어떤 함수에도 대응할 수 있습니다.
예시
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")
실행 결과
함수 호출 전
Hello, Alice!
함수 호출 후
4. 데코레이터 실전 예시 – 실행 시간 측정
데코레이터는 실전에서도 매우 자주 사용됩니다.
예를 들어, 함수 실행 시간을 측정하는 데코레이터를 만들어볼 수 있습니다.
예시
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"실행 시간: {end_time - start_time:.4f}초")
return result
return wrapper
@timer
def slow_function():
time.sleep(2)
print("느린 함수 완료")
slow_function()
실행 결과
느린 함수 완료
실행 시간: 2.00초
이처럼 데코레이터를 사용하면,
핵심 로직을 변경하지 않고도 다양한 부가 기능을 추가할 수 있습니다.
결론 – 데코레이터를 이해하면
- 코드 재사용성과 가독성이 향상됩니다.
- 로깅, 접근 제어, 실행 시간 측정 등 다양한 상황에 적용할 수 있습니다.
- 복잡한 기능도 깔끔하게 추가할 수 있어 코드 품질이 높아집니다.
처음에는 간단한 예제부터 따라 해보고,
점차 여러 인자나 다양한 상황에 맞춘 데코레이터를 작성해보세요.
'개발 > Python' 카테고리의 다른 글
파이썬 파일 입출력(IO): 텍스트 파일 읽고 쓰기 기본기 (0) | 2025.05.02 |
---|---|
파이썬 모듈과 패키지: 파이썬 코드 재사용과 구조화하기 (0) | 2025.05.02 |
파이썬 예외 처리(Try-Except) 제대로 사용하는 방법 (0) | 2025.05.01 |
파이썬 클래스와 객체지향 프로그래밍(OOP) 입문 (1) | 2025.05.01 |
파이썬 함수(function) 만드는 방법과 활용법 쉽게 배우기 (0) | 2025.05.01 |