파일 디스크립터(File Descriptor)란?
파일 디스크립터는 운영체제(OS) 커널이 직접 제공하는 저수준(low-level) 파일 처리 기능입니다. 파일 디스크립터는 하나의 정수 값으로, 각 프로세스마다 커널이 유지 관리하는 '열린 파일 테이블'에서 해당 파일을 식별하는 역할을 합니다.
파일 디스크립터를 직접 다루기 어려운 이유
수많은 시스템 콜(system call)이 파일 디스크립터를 인자로 받지만, 실제로 다루기에는 상당히 불편합니다. 일반적으로 다음과 같은 이유 때문입니다.
- 고정 크기(fixed-width) 버퍼를 직접 준비하고 관리해야 합니다.
- 특정 조건에서는 작업을 여러 번 재시도(retry)해야 합니다.
- 오류 발생 시 이를 직접 확인하고 처리하는 코드를 모두 작성해야 합니다.
파이썬 파일 객체가 해결해 주는 것
파이썬의 파일 객체(File Object)는 이러한 원시적인 파일 디스크립터를 감싸는(wrap) 클래스입니다. 파일 객체를 사용하면 복잡한 저수준 처리를 신경 쓰지 않고도 파일 작업을 훨씬 편리하고 안전하게 수행할 수 있습니다.
예를 들어 파일 객체는 다음과 같은 기능을 기본적으로 제공합니다.
- 자동 오류 처리: 내부적으로 발생하는 예외 상황을 일관된 방식으로 다룹니다.
- 버퍼링(buffering): 읽기·쓰기 성능을 높이기 위해 데이터를 버퍼에 모아서 처리합니다.
- 한 줄씩 읽기: 반복문과 함께 파일을 라인 단위로 손쉽게 순회할 수 있습니다.
- 자동 종료: 가비지 컬렉션(garbage collection) 시점에 파일이 자동으로 닫힙니다.
즉, 파일 디스크립터는 운영체제와 소통하기 위한 필수적인 저수준 인터페이스이지만, 파이썬 개발자는 대부분 이를 직접 다룰 필요 없이 편리한 파일 객체를 통해 파일을 다루면 됩니다.