[python] with
with
파이썬에서 with는 context manager(컨텍스트 관리자)를 사용할 때 쓰는 키워드입니다.
주로 파일, 네트워크 연결, 데이터베이스 연결처럼 열고 닫아야 하는 자원을 자동으로 관리할 때 사용합니다.
✅ 핵심 기능 요약
- with 블록이 끝나면 자원을 자동으로 정리(예: 파일 닫기)
- try-finally 없이도 안전하고 간결한 코드 작성 가능
📄 파일 입출력에서의 예시
❌ 일반 방식 (직접 열고 닫음)
file = open("example.txt", "r", encoding="utf-8")
data = file.read()
file.close()
✅ with 사용 방식
with open("example.txt", "r", encoding="utf-8") as file:
data = file.read()
# 여기서 file은 자동으로 닫힘
➕ 장점
- close()를 깜빡하지 않아도 됨
- 예외가 발생해도 자동으로 자원 해제
- 코드가 간결하고 안전
🧪 다른 예시: pickle과 함께 사용
import pickle
data = {"name": "Alice", "age": 30}
with open("data.pickle", "wb") as f:
pickle.dump(data, f) # 파일은 자동으로 닫힘
⚙️ 작동 원리: Context Manager
with는 컨텍스트 관리자라는 객체의 __enter__()와 __exit__() 메서드를 호출합니다.
with some_context as var:
# some_context.__enter__() 실행됨 → var에 할당
# 블록 수행
# some_context.__exit__() 자동 호출됨
✅ 언제 쓰면 좋은가요?
- 파일 읽기/쓰기
- 데이터베이스 연결
- 소켓 연결
- 락(lock) 제어
- 임시 리소스 할당/해제
실습
import pickle
with open("profile.pickle", "rb") as profile_file:
print(pickle.load(profile_file))
profile.pickle 파일을 rb모드로 여는 것을 변수 profile_file로 정의
profile_file 변수를 통해 내용을 불러온다.
{'이름': '박명수', '나이': 30, '취미': ['축구', '골프', '코딩']}
with open("study.txt", "w", encoding="utf8") as study_file:
study_file.write("파이썬을 열심히 공부하고 있어요")
with open("study.txt", "r", encoding="utf8") as study_file:
print(study_file.read())
파이썬을 열심히 공부하고 있어요
퀴즈
Quiz) 당신의 회사에서는 매주 1회 작성해야 하는 보고서가 있습니다.
보고서는 항상 아래와 같은 형태로 출력되어야 합니다.
- X 주차 주간보고 -
부서 :
이름 :
업무 요약 :
1주차부터 50주차까지의 보고서 파일을 만드는 프로그램을 작성하시오.
조건 : 파일명은 '1주차.txt', '2주차.txt', ...와 같이 만듭니다.
for i in range(1, 51):
with open(str(i) + "주차.txt", "w", encoding="utf8") as report_file:
report_file.write("- {0} 주차 주간보고 -".format(i))
report_file.write("\n부서 : ")
report_file.write("\n이름 : ")
report_file.write("\n업무 요약 : ")
퀴즈2
1. 파이썬 `print()` 함수에서 여러 항목을 출력할 때, 항목들 사이에 특정 문자를 넣고 싶다면 어떤 인자를 사용해야 할까요?
`sep` 인자는 `print()` 함수로 여러 항목을 출력할 때, 그 항목들 사이에 어떤 문자를 넣을지 지정합니다. 기본값은 공백 문자입니다.
2. `input()` 함수를 사용하여 사용자에게 값을 입력받으면, 입력된 값의 기본 자료형은 무엇일까요?
`input()` 함수로 입력받은 모든 값은 숫자나 다른 형태라도 항상 문자열(str) 타입으로 처리됩니다. 필요하다면 명시적으로 형변환해야 합니다.
3. 파일을 다룰 때, `open()` 함수의 모드 중 'w'가 의미하는 것은 무엇인가요?
'w' 모드는 파일을 쓰기(write) 전용으로 엽니다. 만약 파일이 이미 존재하면 기존 내용을 모두 지우고 새로 씁니다.
4. 파이썬의 `pickle` 모듈은 주로 어떤 목적으로 사용될까요?
`pickle`은 파이썬 프로그램에서 사용되는 리스트, 딕셔너리 같은 복잡한 객체를 그대로 파일로 저장하고, 다시 불러와서 객체로 복원할 수 있게 해줍니다.
5. 파일을 다룰 때 `with` 문을 사용하면 얻는 가장 큰 장점은 무엇일까요?
`with` 문을 사용하면 파일이나 네트워크 연결 같은 리소스 사용 후, 개발자가 명시적으로 `close()`를 호출하지 않아도 자동으로 안전하게 리소스를 해제해 줍니다.