학습 목표
이번 강의에서는 파이썬의 데코레이터(Decorator) 개념을 이해하고, 이를 이용하여 코드를 간결하게 작성하는 방법을 배웁니다. 데코레이터를 활용하여 함수의 기능을 확장하고, 반복적인 코드를 줄이는 기법을 익힐 것입니다.
개념 설명
데코레이터는 함수나 메서드를 감싸서 그 기능을 수정하거나 확장하는 역할을 합니다. 데코레이터는 보통 다른 함수를 인자로 받아서 새로운 함수를 반환하는 형태로 작동합니다. 이를 통해 코드의 반복성을 줄이고, 특정 작업을 여러 함수에 일관되게 적용할 수 있습니다. 일반적으로 데코레이터는 다음과 같이 정의됩니다:
def decorator_function(original_function):
def wrapper_function():
# 추가하고자 하는 기능
return original_function()
return wrapper_function
예제 코드
# 간단한 데코레이터 정의
def my_decorator(func):
def wrapper():
print("함수 호출 전 작업")
func() # 원래 함수 호출
print("함수 호출 후 작업")
return wrapper
# 데코레이터 적용
@my_decorator
def say_hello():
print("안녕하세요!")
# 데코레이터가 적용된 함수 호출
say_hello() # 결과: 추가 작업과 함께 인사 메시지 출력
코드 설명
위 코드는 데코레이터의 기본적인 사용 방법을 보여줍니다.
my_decorator
함수는 주어진 함수를 감싸는wrapper
함수를 정의합니다.wrapper
함수는 원래 함수 호출 전후에 추가 작업(메시지 출력)을 수행합니다.@my_decorator
를 사용하여say_hello
함수에 데코레이터를 적용하였습니다.- 이후
say_hello()
를 호출하면 데코레이터의 효과를 보여주는 메시지와 함께 인사 메시지가 출력됩니다.
연습 문제
1. 함수의 실행 시간을 측정하는 데코레이터를 작성하여, 실행 시간을 출력하는 프로그램을 만들어 보세요.
2. 함수가 받은 인자를 출력하는 데코레이터를 작성하여, 인자와 함께 함수를 호출하는 장면을 출력하도록 해보세요.
연습 문제 해답
# 1번 문제: 실행 시간을 측정하는 데코레이터
import time
def timing_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time() # 시작 시간 기록
result = func(*args, **kwargs) # 원래 함수 호출
end_time = time.time() # 종료 시간 기록
print(f"{func.__name__} 실행 시간: {end_time - start_time} 초")
return result
return wrapper
@timing_decorator
def compute_sum(n):
return sum(range(n))
# 테스트
print("합계:", compute_sum(1000000)) # 합계 계산과 실행 시간 측정
# 2번 문제: 인자를 출력하는 데코레이터
def print_args_decorator(func):
def wrapper(*args, **kwargs):
print("인자:", args, kwargs) # 인자 출력
return func(*args, **kwargs) # 원래 함수 호출
return wrapper
@print_args_decorator
def greet(name):
return f"안녕하세요, {name}님!"
# 테스트
print(greet("홍길동")) # 인자와 인사 메시지 출력
### 설명
- **데코레이터**의 개념 설명과 함께 함수의 기능을 확장하는 방법을 보여줍니다.
- **예제 코드**에서는 간단한 데코레이터와 적용 방법을 설명하며, 그 작동 방식을 시각적으로 설명해줍니다.
- **연습 문제**를 통해 사용자가 직접 데코레이터를 작성하여 구현 능력을 높일 수 있도록 도와줍니다. 이 과정은 코드의 재사용성을 높이고, 프로그램의 가독성을 높이는 데 기여합니다.
0 댓글