Frame at 0.00s
## 컨텍스트 매니저(Context Manager) 이해하기 ### ❓ 컨텍스트 매니저란? * 코드의 특정 범위 앞뒤에서 **추가적인 코드 실행**이 필요할 때 사용하는 파이썬 기능입니다. * 대표적으로 코드 실행 시간 측정, 임시 파일 처리, 딥러닝 모델의 특정 부분 연산 비활성화 등에 활용됩니다. ### 💡 왜 컨텍스트 매니저를 사용할까요? * **중복 코드 방지**: 자주 사용되는 앞뒤 코드 로직을 함수처럼 재활용할 수 있습니다. * **가독성 향상**: "덕지덕지" 붙는 앞뒤 코드를 깔끔하게 관리하여 코드의 가독성을 높입니다. * **전문적인 코드 작성**: 컨텍스트 매니저 활용은 코드를 더욱 전문적이고 세련되게 보이게 합니다. ### ⚙️ 컨텍스트 매니저의 작동 원리 컨텍스트 매니저는 크게 두 부분으로 나뉩니다. 1. **선언 (Definition)**: * `@contextmanager` 데코레이터 (with문 사용 시 자동 호출) * `yield` 키워드를 기준으로 앞부분과 뒷부분으로 나뉩니다. * `yield` 앞: 범위 시작 전에 실행될 코드 * `yield` 뒤: 범위 종료 후에 실행될 코드 2. **사용 (Usage)**: * `with` 문을 사용하여 컨텍스트 매니저를 호출합니다. * `with` 블록 진입 시: 선언부의 `yield` 앞 코드가 실행됩니다. * `with` 블록 종료 시: 선언부의 `yield` 뒤 코드가 실행됩니다. ### ⏱️ 예시: 코드 실행 시간 측정 ```python from contextlib import contextmanager import time @contextmanager def timer(): start_time = time.time() # yield 앞: 시작 시간 측정 yield end_time = time.time() # yield 뒤: 종료 시간 측정 및 차이 출력 print(f"Execution time: {end_time - start_time:.4f} seconds") # 컨텍스트 매니저 사용 with timer(): # 측정하고 싶은 코드 print("Doing some work...") time.sleep(1) print("Work done!") # 출력 예시: # Doing some work... # Work done! # Execution time: 1.0012 seconds ``` ### 🌐 기타 활용 사례 * **임시 파일 활용**: 파일을 생성하고 사용 후 자동으로 삭제 * **딥러닝**: * `torch.no_grad()`: 그래디언트 계산 비활성화 * `torch.autocast()`: 자동 혼합 정밀도 연산 컨텍스트 매니저를 직접 설계하고 활용할 줄 알면, 복잡한 코드에서도 효율적이고 간결하게 로직을 관리할 수 있습니다.