728x90
파이썬의 with
문은 자원 관리를 보다 명확하고 안전하게 처리할 수 있도록 도와주는 문법입니다. 파일 열기와 같이 자원을 열고 닫는 작업에 자주 사용되며, contextlib
모듈을 활용하면 이러한 with문의 동작을 커스터마이징할 수 있습니다.
● with문의 기본 구조
with
문은 컨텍스트 매니저(Context Manager)를 기반으로 동작하며, __enter__
와 __exit__
메서드를 구현한 객체를 통해 자원 할당과 해제를 자동으로 수행합니다.
with open("test.txt", "r") as f:
data = f.read()
이 코드는 파일을 열고 읽은 뒤 자동으로 파일을 닫습니다. 수동으로 close()
를 호출할 필요가 없습니다.
● 사용자 정의 컨텍스트 매니저
클래스에 __enter__
와 __exit__
메서드를 구현하면 직접 with문에서 사용할 수 있는 객체를 만들 수 있습니다.
class CustomContext:
def __enter__(self):
print("자원 획득")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("자원 해제")
with CustomContext():
print("작업 중")
출력 결과는 "자원 획득 → 작업 중 → 자원 해제" 순서로 동작합니다.
● contextlib.contextmanager 사용
contextlib.contextmanager
데코레이터를 사용하면 클래스를 만들지 않고도 함수 기반으로 컨텍스트 매니저를 쉽게 정의할 수 있습니다.
from contextlib import contextmanager
@contextmanager
def custom_open(path):
f = open(path, "r")
try:
yield f
finally:
f.close()
with custom_open("test.txt") as f:
print(f.read())
이 방식은 자원 해제를 finally
에서 보장하기 때문에 매우 안전합니다.
● 마무리
컨텍스트 매니저는 자원 관리가 필요한 모든 상황에서 유용하게 쓰입니다. 특히 contextlib
을 활용하면 반복적인 자원 처리 코드를 깔끔하게 리팩토링할 수 있습니다. 파일, 네트워크, 데이터베이스 등 다양한 영역에서 응용할 수 있으므로 꼭 익혀두시기 바랍니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter10. 데코레이터 함수의 작성과 활용 (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter09. 일급 객체와 클로저 (0) | 2025.05.18 |
[파이썬][중급] Chapter07. 예외 처리 패턴과 리팩토링 (0) | 2025.05.18 |
[파이썬][중급] Chapter06. 사용자 정의 예외 클래스 (0) | 2025.05.18 |
[파이썬][중급] Chapter05. 매직 메서드(__str__, __eq__, __lt__ 등) (0) | 2025.05.18 |