파일은 저장장치에 저장되어 있을 뿐입니다.
USB, SSD, 하드디스크, 어떤 것이든 파일은 저장장치에 저장되어 있을 뿐입니다.
따라서 소프트웨어는 파일에 알아서 접근할 수 없습니다.
open 함수는 소프트웨어가 어떤 파일에 접근할지 지정하는 것이고,
소프트웨어와 파일 사이에 관계가 형성됩니다. 그걸 우리는 파일 객체라고 부르죠.
마찬가지로 프로그램이 종료될 때는 올바르게 소프트웨어와 파일 사이의 관계를 끊어야 합니다. 이를 우리는 close 함수로 지시하는 겁니다.
그림 27-1을 보면
파일을 사용하려면 반드시 열기를 해야 하고,
쓰기나 읽기를 한 다음에는
반드시 파일을 닫아야 하는 것이죠.
file 변수는 open 함수로 연 파일과의 관계를 담고 있을 뿐이고,
파일 객체라고 부를 뿐입니다.
파이썬은 모든 것을 객체로 다룹니다.
숫자도 객체입니다.
>>> a = 1
>>> type(a)
<class 'int'>
>>>
숫자 1도 int 클래스이죠. 클래스 = 객체입니다.(정의에 차이는 있지만, 여기서는 중요하지 않으니 무시합시다)
파일 객체를 close 함수로 닫지 않으면 프로그램이 해당 파일을 계속 점유한 상태가 됩니다. 이런 경우 다른 프로그램은 이 파일에 접근할 수 없습니다.
두 프로그램이 동시에 같은 파일에 접근해서 쓰기를 한다면 두 프로그램은 서로의 존재를 알지 못하니까 데이터 파일이 엉망이 되겠지요.
Windows를 보면 가끔 이런 화면이 표시됩니다.
사용 중인 폴더나 파일이 있다는 것이죠.
보통은 프로그램이 종료되면 close 함수를 호출하지 않고 엉망으로 프로그램을 작성했어도 해당 파일 객체로 운영체제(Windows)가 회수해버립니다.
이렇게 워드가 사용 중인 문서 파일은 삭제할 수 없습니다.
저장장치에 워드 문서가 100개라도 지금 워드가 사용하는 문서 1개만 이렇게 삭제할 수 없습니다. 이 파일만 open으로 연 함수이고, 워드와 문서가 연결된 상태라는 뜻이겠지요? 제대로 close를 해줘야 워드와 문서 사이의 연결을 종료할 수 있습니다.
따라서 open -> 파일 사용 -> close는 파이썬뿐 아니라 자바, C++, 어떤 프로그래밍 언어를 써도 공통입니다.
close를 안 쓰는 코드를 작성해도 프로그램이 종료되면 파일 객체로 같이 회수되니 문제는 없지만, 버그를 유발하거나 회사에서는 잘못된 코드라는 리뷰를 받게 될 것입니다.