BufferedReader와 FileReader의 차이는 무엇인가요?
BufferedReader와 FileReader는 모두 자바에서 파일을 읽기 위해 사용하는 클래스이지만, 그 기능과 역할에는 차이가 있습니다.
두 클래스를 비교하며 설명드리겠습니다.
1. FileReader - 역할 : 파일에서 문자(character) 단위로 데이터를 읽어오는 클래스입니다.
- 기본 특징 : - `InputStreamReader`의 하위 클래스이며, 파일로부터 문자 스트림을 직접 읽습니다.
- 한 번에 한 문자씩 읽기 때문에 속도가 느릴 수 있습니다.
- 버퍼링(buffering)이 없기 때문에, 파일을 직접 읽으므로 효율성이 떨어질 수 있습니다.
- 주요 생성자 예시 : ```java FileReader fr = new FileReader("example.txt"); ``` - 사용 예제 : ```java int c; while ((c = fr.read()) != -1) { System.out.print((char) c); } fr.close(); ``` 2. BufferedReader - 역할 : 문자 입력 스트림에 버퍼를 제공해 효율적인 입력을 가능하게 하는 클래스입니다.
- 기본 특징 : - 내부적으로 버퍼(buffer)를 사용하여 작은 크기의 데이터를 여러번 읽지 않고 큰 덩어리로 읽어들입니다.
- `read()` 메서드 외에도 `readLine()` 메서드를 지원하여 파일을 한 줄씩 읽을 수 있습니다.
- 성능이 뛰어나고 편리한 메서드를 많이 제공하기 때문에 `FileReader`를 감싸서 사용하는 경우가 많습니다.
- 주요 생성자 예시 : ```java BufferedReader br = new BufferedReader(new FileReader("example.txt")); ``` - 사용 예제 : ```java String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); ``` 차이점 요약 | 구분 | FileReader | BufferedReader | |----------------|------------------------------------|--------------------------------------| | 기능 | 문자 단위로 파일 읽기 | 버퍼링하여 효율적으로 문자 스트림 읽기 | | 주 용도 | 파일에서 문자 읽기 | 한 줄씩 읽기, 반복 입출력에 효율적 | | 버퍼링 유무 | 없음 | 있음 | | 읽기 성능 | 상대적으로 느림 | 버퍼링하여 빠름 | | 편의 메서드 | 기본적인 문자 읽기 (`read()`)만 지원 | `readLine()`, `ready()` 등 다수 지원 | 결론 - FileReader 는 단순히 파일로부터 문자 데이터를 직접 읽을 때 사용합니다.
- BufferedReader 는 FileReader와 같이 입력 스트림을 감싸서 사용하며, 버퍼링 기능으로 인해 읽기 속도가 빨라지고, 한 줄 단위 읽기 같은 편리한 기능까지 제공합니다.
- 일반적으로 파일을 읽을 때는 `FileReader`를 `BufferedReader`로 감싸서 사용하는 것이 권장됩니다.
```java try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } ``` 이렇게 하면 효율적이고 편리하게 파일을 읽을 수 있습니다.