Python

[Python] With는 뭘까?

Dongi 2022. 2. 13. 15:26

 

 

안녕하세요 동기 여러분!

예전에 저는 유튜브를 통해서 처음 파이썬을 접하게 되었는데 그때 당시에 배울 때는 with 없이 open()으로 파일을 열고 선생님이 꼭 닫아 줘야 한다고 해서 .close()로 닫아 줬던 기억이 가물가물 납니다. 그런데 우리 지난 시간하고 지지난 시간에 알아본 파일 읽고 쓰기 할 때는 전혀 .close() 함수를 사용하지 않았죠! 왜 그럴까요? 에 대해 알아봅시다!

 

 

 

With 넌 뭐니?

with라는 친구는 우리가 .open()으로 파일을 열 때 context manager 역할을 수행합니다.  context manager 역할에 앞서 파일을 닫아 줘야 하는 이유는 파일을 닫지 않게 되면 파이썬은 '음, 주인님이 아직 사용 중이시구나 그럼 내 메모리 속에 두어야징~'하며 메모리 속에 담아둡니다. 그렇게 되면 메모리에도 영향을 주게 되고 → (컴터가 느려짐), 다른 프로그램에서 사용을 할 수도 없는 경우도 생기고 → (게임 켜놓고 삭제하려면 안되듯이), 또한 데이터 쓰기가 완료되지 않을 수도 있습니다. → 알아보니 파이썬은 가비지 컬렉터가 닫아 주긴 한다고 합니다. 그래도 개발자는 어떤 프로그램을 사용하게 될지 모르니 파일 닫기를 습관화합시다.

 

뭔가 위의 이야기를 듣고 보니 찝찝하지 않으신가요? 저는 인터넷 창도 계속 닫아주는뎈ㅋㅋㅋㅋ(찝찝해서)

 

이것을 두 방에 해결해주는 것이 아래의 코드(Older-style syntax 구 방식)

f = open("파일이름.txt")
print(f.read())
f.close()
  • 열고
  • 읽고
  • 닫고!

 

이것을 한 방에 해결해주는 것이 아래의 코드! 오늘의 주인공 with!

with open('파일이름.txt') as 대체할 변수:
    print(대체할 변수.read())
  • 열고
  • 읽고
  • 알아서 닫히고!

 


 

그래서 어떻게 파일이 자동으로 닫힌다는 거야?

위 코드에 print() 함수 앞에 공간을 보면 빈 공간이 있는데 그것을 idented block이라고 합니다. 들여쓰기 공간이죠. 그곳을 떠나면 자동으로 파일이 닫힙니다. (이것이 with가 context manager로써의 역할)

with open('파일이름.txt') as 대체할 변수:
    print(대체할 변수.read())
    
print("이렇게 떠나면 자동으로 파일이 닫힙니다")

 

 


 

오늘의 느낌

with를 설명하기 위해 영어로 된 글도 읽어보고 블로그도 찾아가 보고 예전에 들었던 강의도 봤는데 말들이 너무 어려워서 좀 쉽게 표현하려 노력했습니다. 그냥 그렇다구욧!

 

 

PS. '닫깁니다'가 아니라 '닫힙니다'가 맞는 문법이구나... 사투리 때문에 그런가 왜 '닫깁니다' 같지?ㅋㅋㅋㅋㅋ