Java에서 사용자 입력을 처리하거나 파일을 읽는 데 자주 사용되는 두 가지 클래스는 BufferedReader와 Scanner입니다. 이 글에서는 두 클래스의 주요 차이점, 성능 비교, 그리고 성능 차이가 발생하는 이유에 대해 알아보겠습니다.
1. BufferedReader와 Scanner
1.1 BufferedReader
BufferedReader는 Java의 I/O 패키지(java.io)에 포함되어 있으며, 대량의 문자 데이터를 읽는 데 최적화된 클래스입니다.
- 주요 특징:
- 버퍼를 사용하여 효율적인 데이터 읽기를 지원.
- 데이터를 문자열 단위로 처리 (readLine() 메서드 제공).
- 입력을 해석하거나 파싱하지 않음.
1.2 Scanner
Scanner는 Java의 유틸리티 패키지(java.util)에 포함되어 있으며, 다양한 기본 데이터 타입을 쉽게 파싱할 수 있는 기능을 제공합니다.
- 주요 특징:
- 입력 데이터를 토큰 단위로 분리하여 처리.
- 기본 데이터 타입(int, double 등)으로 변환하는 메서드 제공.
- 상대적으로 사용법이 직관적.
2. BufferedReader와 Scanner의 주요 차이
| 패키지 | java.io | java.util |
| 주요 용도 | 문자열을 효율적으로 읽기 | 입력 데이터를 파싱하여 처리 |
| 데이터 처리 단위 | 라인 단위 (readLine()) | 토큰 단위 (nextInt(), nextLine() 등) |
| 속도 | 더 빠름 | 상대적으로 느림 |
| 버퍼 크기 | 기본 크기: 8192 바이트 | 내부적으로 작은 버퍼 사용 (1KB) |
| 사용법 | 간결하지만 데이터 파싱은 직접 처리해야 함 | 사용하기 간단, 데이터 타입 변환 용이 |
3. 성능 비교
BufferedReader는 Scanner보다 일반적으로 더 빠릅니다. 그 이유는 다음과 같습니다:
- 버퍼 크기 차이:
- BufferedReader는 기본적으로 8192 바이트 크기의 버퍼를 사용하여 대량의 데이터를 한 번에 읽습니다.
- Scanner는 내부적으로 약 1KB 정도의 작은 버퍼를 사용합니다.
- 추가 작업의 유무:
- Scanner는 입력 데이터를 토큰화하고, 필요한 경우 데이터 타입으로 변환하는 추가 작업을 수행합니다.
- BufferedReader는 단순히 문자열 데이터를 읽는 작업만 수행합니다.
- 다양한 기능의 영향:
- Scanner는 여러 데이터 타입과 정규식을 지원하기 때문에 더 많은 오버헤드가 발생합니다.
4. 결론
BufferedReader와 Scanner는 각각의 장단점이 있는 입력 처리 도구입니다. 성능이 중요한 상황에서는 BufferedReader를 사용하는 것이 적합하며, 사용의 간편함과 데이터 파싱이 중요한 경우에는 Scanner를 사용하는 것이 좋습니다. 이 두 클래스의 특성을 잘 이해하고 상황에 맞게 선택하는 것이 중요합니다.
'java' 카테고리의 다른 글
| Java 상속에 관하여 (0) | 2025.02.03 |
|---|---|
| Signature 에 관하여 (0) | 2025.01.22 |
| 숏서킷 연산에 관하여 (0) | 2025.01.20 |
| Interface 에 관하여 (1) | 2025.01.19 |
| Method 에 관하여 (0) | 2025.01.16 |