컨텍스트 매니저(context manager)는 「자원을 사용한 뒤 자동으로 정리하는」 패턴을 표준화한 파이썬의 강력한 도구입니다.
with 문과 함께 쓰며, 「파일 자동 닫기」가 가장 친숙한 예입니다.
기본 형식.
with open("data.txt") as f: content = f.read().
with 블록이 끝나면 파일이 자동으로 닫힙니다 — 예외가 발생해도 보장됩니다.
이 패턴 덕분에 「파일을 닫는 것을 잊는」 실수가 사라집니다.
with는 파일뿐 아니라 다양한 자원에 쓰입니다.
데이터베이스 연결, 락(lock), 임시 디렉토리, HTTP 세션, 측정 시간(time it).
「뭔가를 시작하고 끝낼 때 정리가 필요한」 모든 패턴에 자연스럽게 맞습니다.
여러 자원을 동시에 with로.
with open("in.txt") as fin, open("out.txt", "w") as fout: ...
— 두 파일을 동시에 열고, 둘 다 자동 닫기.
들여쓰기 한 단계로 여러 자원을 한꺼번에 관리할 수 있습니다.
비유하자면 컨텍스트 매니저는 「화재 안전이 보장된 캠핑」과 같습니다.
평소엔 「불 켜기 → 사용 → 끄기」를 하지만 사용자가 끄는 것을 잊는 일이 생깁니다.
컨텍스트 매니저는 「블록을 떠날 때 자동으로 끄도록 보장」해 안전을 자동화합니다.
한 줄 요약
컨텍스트 매니저는 with 문과 결합해 자원의 사용 후 자동 정리를 보장합니다.
파일·DB·락·임시 디렉토리 등 거의 모든 「시작-끝」 자원 관리의 표준입니다.
더 알아볼 것
- __enter__·__exit__ — 직접 만들기
- contextlib.contextmanager — 함수로 만들기
- contextlib.closing — 일반 객체를 컨텍스트 매니저로