2023년 6월 업데이트
안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with를 진행토록 하겠습니다.
SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록
코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.
예를 들어, 8_with.py를 생성하고 코드를 실행합니다.
TL;DR
Python의 with 구문은 코드를 단순화하고 자동으로 클린업 작업을 수행합니다. with 구문을 사용하면 코드가 더 간결해지고 외부 리소스를 관리하기 쉬워지며. 파일 스트림과 같은 외부 리소스를 관리하는 데 유용합니다.
Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with
with 구문을 사용하면 try/finally 에서 코드를 단순화시킬 수 있고 항상, 클린업 작업을 자동 실행합니다.
설명만으로는 감이 잘 안 오실 겁니다. 하지만 코드를 살펴보면 금방 이해하실 거예요.
이미 몇 번, 이전 강좌의 포스트에서 with 구문을 쓰는 것을 보여드렸습니다. 파일 입출력과 관련된 부분이었는데요.
Python에서 with를 사용하는 이유
SQLER의 이전 포스트에서 보신 것처럼, 파일 스트림 작업을 할 때, 보통 이런 패턴으로 작업합니다.
파일을 쓰기 위해 열고, 쓰기 작업 후, 스트림을 close 해서 완료하는 절차입니다.
stream = open('output.txt', 'wt') stream.write('Lorem ipsum dolar') stream.close() # 꼭 close를 해야 합니다.
만약 정상적으로 close 되지 않으면, 다음에 파일을 열 때, 파일이 이미 열려 있다는 메시지가 뜨고 적절한 처리를 해야 합니다.
try / finally 작업
이런 경우를 대비해 try / finally 패턴 작업이 필요합니다.
try: stream = open('output.txt', 'wt') stream.write('Lorem ipsum dolar') finally: stream.close() # 정상/오류 상황 양쪽 모두, finally block을 통해 close 해야 합니다.
이런 경우에, with 구문이 유용합니다. 위의 코드를 이런 식으로, with 구문으로 변경할 수 있습니다.
with로 변경한 과정
with open('output.txt', 'wt') as stream: stream.write('Lorem ipsum dolar')
이렇게 file stream 작업이나 다른 네트워크 stream 작업 등의 외부 리소스 관련 작업을 할 때, with를 이용하면 코드를 더 간결하게 유지하면서 같은 작업을 할 수 있습니다.
도움 되시길 바랍니다.
파이썬 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.
책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터
참고자료
개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝