메모리를 극도로 아끼면서 순회 데이터를 만드는 **제너레이터(Generator)**와 기존 함수의 코드를 고치지 않고 기능을 확장하는 데코레이터(Decorator) 패턴을 학습합니다.
1. 고급 문법 용어 사전 (Glossary)
- Lazy Evaluation (지연 평가): 모든 데이터를 메모리에 한 번에 올리지 않고, 요청이 들어올 때마다 하나씩 계산하여 생성해 내는 성능 최적화 기법입니다.
yieldKeyword: 함수 실행을 일시 중단하고 호출자에게 값을 반환한 뒤, 다음 요청 시 중단점부터 다시 실행을 이어나가게 해주는 제너레이터 키워드입니다.- Closure (클로저): 자신을 둘러싼 외부 함수의 스코프 환경을 기억하고 있는 내부 함수 객체입니다.
- Decorator (
@decorator): 다른 함수를 인자로 받아 새로운 기능을 덧붙인 함수로 감싸서 반환하는 디자인 패턴입니다.
2. yield 제너레이터 및 데코레이터 코드
import time
# 1. 실행 시간 측정 데코레이터
def timer_decorator(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"[{func.__name__}] 실행 시간: {(end - start)*1000:.2f}ms")
return result
return wrapper
# 2. yield 제너레이터
def count_down(n):
while n > 0:
yield n
n -= 1
@timer_decorator
def run_generator():
for number in count_down(3):
print(f"카운트: {number}")
run_generator()