파이썬에서 close() 함수는 열려 있는 파일을 닫는 역할을 합니다. 파일 작업이 끝난 후 반드시 호출해야 하는 중요한 메서드인데요, 그 이유와 함께 올바른 사용 방법을 살펴보겠습니다.
close() 함수 기본 사용 예제
f = open('my_file', 'r+')
my_file_data = f.read()
f.close()위 코드는 my_file 파일을 읽기/쓰기 모드(r+)로 연 뒤, 파일의 내용을 my_file_data 변수에 저장하고 마지막으로 f.close()를 호출해 파일을 닫습니다.
파일을 꼭 닫아야 하는 이유
파이썬에서 open()으로 파일을 열면, 운영체제(OS)는 해당 파일을 읽고 쓸 수 있도록 파일 핸들(file handle)을 프로그램에 할당합니다. 이때 작업이 끝난 후 파일을 닫지 않으면 다음과 같은 문제가 발생할 수 있습니다.
- 운영체제가 할당한 리소스(메모리, 파일 디스크립터)가 계속 점유됨
- 열려 있는 파일 수가 시스템 제한을 초과하면 새 파일을 열 수 없음
- 파일에 가해진 변경 사항이 제대로 저장(플러시)되지 않아 데이터 손실 가능성 발생
오류 상황에서 파일이 닫히지 않는 문제
만약 프로그램 실행 중 오류(exception)가 발생해서 f.close()가 호출되지 않는다면, 파일은 계속 열린 상태로 남게 되어 리소스가 해제되지 않습니다.
with open(...) as 구문으로 자동 닫기
이런 문제를 방지하는 가장 좋은 방법은 with open(...) as 구문을 사용하는 것입니다. 이 구문은 코드 블록이 정상적으로 끝나든, 도중에 오류가 발생하든 상관없이 파일을 자동으로 닫아주기 때문에 안전합니다.
with open('my_file', 'r+') as f:
my_file_data = f.read()위 코드처럼 with 블록 내에서 파일 작업을 수행하면, 블록이 종료되는 순간 파이썬이 자동으로 close()를 호출합니다. 따라서 실무에서는 명시적으로 close()를 호출하기보다 with 문을 사용하는 것이 권장됩니다.