반응형
파이썬의 숨은 보석, Context Manager로 코드 깔끔하게 작성하기
파이썬의 Context Manager는 "with" 문과 함께 사용되는 유용한 기능입니다. 이를 적절히 활용하면 자원 열기/닫기, 락 획득/해제, 트랜잭션 시작/롤백 등의 작업을 안전하고 깔끔하게 처리할 수 있습니다.
Context Manager 사용 예시
with open('file.txt') as f:
contents = f.read()
# 파일 읽기 코드
# with 블록을 벗어나면 자동으로 파일이 close됩니다.
위 예시처럼 파일을 열고 닫는 단순한 작업조차도 예외 상황을 고려하면 상당히 복잡해집니다. Context Manager를 사용하면 짧은 구문으로 안전하게 처리할 수 있습니다.
직접 Context Manager 구현하기
Context Manager는 __enter__, __exit__ 메서드를 구현해 직접 만들 수 있습니다.
class CustomContext:
def __init__(self, name):
self.name = name
def __enter__(self):
print(f"{self.name} 시작")
# 리소스 열기 등의 코드
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print(f"{self.name} 종료")
# 리소스 닫기 등의 코드
with CustomContext("작업흐름"):
print("작업 중...")
__enter__에서는 컨텍스트 실행 전 준비 작업을, __exit__에서는 컨텍스트 종료 후 정리 작업을 수행합니다. 예외 발생 시 __exit__의 매개변수로 예외 정보가 전달됩니다.
contextlib 모듈 활용하기
매번 __enter__, __exit__을 구현하기 번거로우면 contextlib 모듈의 contextmanager 데코레이터를 사용할 수 있습니다.
from contextlib import contextmanager
@contextmanager
def custom_context(name):
print(f"{name} 시작")
yield
print(f"{name} 종료")
with custom_context("작업흐름"):
print("작업 중...")
파이썬의 Context Manager는 try/finally 문을 직접 작성하지 않고 자원 관리 코드를 깔끔하게 작성할 수 있게 해줍니다. 상황에 맞게 적절히 활용하면 가독성 있고 예외 안전한 코드를 구현할 수 있습니다.
반응형
'파이썬 기초문법 > 파이썬_코딩테스트' 카테고리의 다른 글
코딩 테스트 대비! 파이썬으로 N-Queen 문제 해결하기 (백트래킹 알고리즘) (0) | 2024.05.12 |
---|---|
코딩 테스트 대비! 파이썬으로 그래프 탐색 알고리즘(BFS, DFS) 구현하기 (0) | 2024.05.12 |
코딩 테스트 대비! 파이썬으로 정렬 알고리즘 구현하기 (0) | 2024.05.10 |
코딩 테스트 대비! 트리 순회(Traversal) 알고리즘 구현하기 (0) | 2024.05.10 |
코딩 테스트 대비! 파이썬으로 "연결 리스트 역순 구현" 문제 해결 (0) | 2024.05.10 |