🧠 with 문이란?

▶️ 정의

리소스를 열고 자동으로 닫아주는 문법
블록(Context)을 벗어나면 알아서 정리/해제(clean-up) 해주는 구조

예:

  • 파일 열고 → 읽고 → 자동으로 닫기
  • DB 연결 열고 → 쿼리 날리고 → 자동 종료
  • Streamlit 폼 열고 → 입력 받고 → 자동 제출 처리

📦 기본 사용 예제

✅ 예시 1: 파일 열기

f = open("data.txt", "r")
try:
    content = f.read()
finally:
    f.close()  # 항상 닫힘

 

💡 with 문은 try-finally를 간단하게 쓰는 방식이에요!

💡 왜 쓰는가?

장점설명
🔐 안전함 에러가 나도 자동으로 리소스를 닫아줌
🧼 깔끔함 코드 구조가 간결하고 명확
✅ 예외 처리 오류가 나도 뒤처리를 자동으로 함
💡 선언형 "무엇을 하고 싶은지"에 집중 가능

 

🧾 Streamlit 예제에서의 with

 

with st.form("signup_form"):
    name = st.text_input("이름")
    email = st.text_input("이메일")
    submitted = st.form_submit_button("가입하기")

 

이 구조는 어떤 의미?

  • st.form("signup_form") 블록 안에서 UI 요소들을 정의
  • 이 form은 버튼을 눌러야 제출(submit) 되도록 구성됨
  • with 문이 끝나는 순간, 내부 구성은 하나의 폼으로 묶이고 처리됨

일반 방식 (즉시 실행됨)

name = st.text_input("이름")

 

with st.form 사용

→ 버튼을 눌러야 값이 반영됨! (폼 제출 구조)

 

결론

with 문 어떤 리소스를 열고, 블록 끝나면 자동으로 정리/닫는 문법
주요 사용처 파일 I/O, DB 연결, 락 처리, Streamlit 폼 등
Streamlit with st.form → 한 번에 UI 구성 + 제출 버튼 제어
핵심장점 에러 방지, 리소스 정리 자동화, 코드 간결화

 

+ Recent posts