java

BufferedReader와 Scanner의 차이 및 비교

heejunp 2025. 1. 21. 21:18

Java에서 사용자 입력을 처리하거나 파일을 읽는 데 자주 사용되는 두 가지 클래스는 BufferedReaderScanner입니다. 이 글에서는 두 클래스의 주요 차이점, 성능 비교, 그리고 성능 차이가 발생하는 이유에 대해 알아보겠습니다.

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보다 일반적으로 더 빠릅니다. 그 이유는 다음과 같습니다:

  1. 버퍼 크기 차이:
    • BufferedReader는 기본적으로 8192 바이트 크기의 버퍼를 사용하여 대량의 데이터를 한 번에 읽습니다.
    • Scanner는 내부적으로 약 1KB 정도의 작은 버퍼를 사용합니다.
  2. 추가 작업의 유무:
    • Scanner는 입력 데이터를 토큰화하고, 필요한 경우 데이터 타입으로 변환하는 추가 작업을 수행합니다.
    • BufferedReader는 단순히 문자열 데이터를 읽는 작업만 수행합니다.
  3. 다양한 기능의 영향:
    • Scanner는 여러 데이터 타입과 정규식을 지원하기 때문에 더 많은 오버헤드가 발생합니다.

4. 결론

BufferedReader와 Scanner는 각각의 장단점이 있는 입력 처리 도구입니다. 성능이 중요한 상황에서는 BufferedReader를 사용하는 것이 적합하며, 사용의 간편함과 데이터 파싱이 중요한 경우에는 Scanner를 사용하는 것이 좋습니다. 이 두 클래스의 특성을 잘 이해하고 상황에 맞게 선택하는 것이 중요합니다.