이전에 배웠던 작업을 with
키워드를 사용해 더 간편하게 만들면서 with
키워드를 배워보자.
import pickle
with open("profile.pickle", "rb") as profile_file:
print(pickle.load(profile_file))
with
키워드를 사용하면 파일을 닫는 작업을 수동으로 해주지 않아도 된다. 이게 어떻게 가능한가?
with
는 파이썬의 컨텍스트 매니저라는 메커니즘을 통해 특정 코드 블록의 진입과 종료시 자동으로 필요한 설정과 관리를 수행한다. 위의 예제처럼 주로 DB연결, 락관리 등 리소스 정리가 필요한 작업에서 사용된다.
with
를 사용하려면 키워드 오른쪽에 __enter__
와 __exit__
이 정의된 컨텍스트 매니저 객체를 작성해야 한다.
컨텍스트 매니저는 객체에 __enter__
와 __exit__
**라는 두 가지 메서드를 정의하여 동작한다.
__enter__
: with
블록에 들어가기 전에 실행되는 메서드. 반환값은 블록 내부에서 사용할 객체가 됨.__exit__
: with
블록을 빠져나갈 때 실행되는 메서드. 예외 발생 시 예외 정보도 전달받아 처리 가능.