특정 블록의 실행 전후에 자동으로 작업을 수행하는 객체
컨텍스트 매니저는 다음 두 가지 메서드를 구현하는 객체입니다:
__enter__
: 컨텍스트 블록이 시작될 때 자동으로 호출됩니다. 여기서 필요한 리소스를 할당하거나 초기화할 수 있습니다.__exit__
: 컨텍스트 블록이 종료될 때 자동으로 호출됩니다. 여기서 리소스를 정리하거나 해제하는 작업을 수행합니다. 또한, 이 메서드는 예외 처리에도 사용될 수 있습니다.with
문을 사용하여 컨텍스트 매니저를 활용할 수 있습니다. with
문은 컨텍스트 블록의 시작과 끝에서 자동으로 __enter__
및 __exit__
메서드를 호출합니다.파일 핸들링에서 컨텍스트 매니저의 사용 예:
with open('example.txt', 'r') as file:
data = file.read()
# 파일이 자동으로 닫힘
여기서 open
함수는 컨텍스트 매니저를 반환합니다. with
문은 파일을 열고 (__enter__
), 파일을 읽은 후에는 자동으로 파일을 닫습니다 (__exit__
).
__exit__
메서드는 예외가 발생했을 때 실행되므로, 예외 발생 시 자원을 정리하는 데 유용합니다.from contextlib import ExitStack
ExitStack
를 사용하여 여러 리소스의 생성 및 소멸을 단일 블록 내에서 관리
할 수 있으며, 예외 발생 시에도 모든 리소스가 올바르게 정리
ExitStack
의 주요 기능ExitStack
은 다양한 리소스(파일, 네트워크 연결, 잠금 등)의 생성 및 소멸을 관리하는 데 유용ExitStack
은 실행 시간에 동적으로 컨텍스트 관리자를 추가하고 제거할 수 있게 해줍니다. ExitStack
은 예외 발생 시에도 열린 모든 리소스가 올바르게 종료되도록 보장합니다. ExitStack
은 Python의 with
문과 함께 사용될 수 있으며, ExitStack().enter_context
메서드는 ExitStack
의 사용 중 하나로, 이 메서드를 통해 다양한 컨텍스트 매니저를 ExitStack
인스턴스에 추가할 수 있습니다.
enter_context
메서드enter_context
메서드는 ExitStack
에 새로운 컨텍스트 매니저를 추가하는 방법__enter__
메서드를 호출ExitStack
은 이 컨텍스트 매니저의 __exit__
메서드를 자동으로 호출하도록 스택에 추가ExitStack
과 enter_context
메서드를 사용하는 예시입니다:from contextlib import ExitStack
with ExitStack() as stack:
file1 = stack.enter_context(open('file1.txt', 'r'))
file2 = stack.enter_context(open('file2.txt', 'r'))
# 여기에서 file1과 file2를 사용
# ...
# ExitStack 블록을 벗어나면 file1과 file2는 자동으로 닫힘
ExitStack
에 추가합니다. with
블록을 벗어날 때, ExitStack
은 자동으로 두 파일을 닫습니다. 동적 관리: 프로그램의 실행 흐름에 따라 동적으로 리소스를 관리할 수 있습니다.
예외 안전성: 예외가 발생해도 모든 컨텍스트 매니저의 __exit__
메서드가 호출되어 리소스가 안전하게 정리됩니다.
코드 간결성: 여러 컨텍스트 매니저를 하나의 with
블록 안에서 관리할 수 있어 코드가 간결해집니다.
ExitStack
은 복잡한 리소스 관리나 예외 처리가 필요한 상황에서 매우 유용한 도구로 활용됩니다.