Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) Scanner vs BufferedReader: 핵심 차이점 총정리

자바에서 ScannerBufferedReader는 모두 외부 시스템으로부터 입력을 읽어오는 데 사용되는 대표적인 클래스입니다. 두 클래스는 비슷한 용도로 쓰이지만 내부 동작 방식과 성능 특성에서 뚜렷한 차이를 보입니다.

일반적으로 Scanner는 입력값이 문자열이나 기본 타입(primitive type)이라는 것을 미리 알고 있을 때 편리하게 사용되며, BufferedReader는 문자 스트림(character stream)에서 텍스트를 읽을 때 버퍼링을 활용해 더 효율적으로 문자를 읽어오는 데 사용됩니다.

Scanner와 BufferedReader의 주요 차이점

번호구분 항목Scanner 클래스BufferedReader 클래스
1동기화(Synchronous)동기화되어 있지 않아 단일 스레드 환경에서만 사용하는 것이 안전합니다.동기화되어 있으며, 멀티스레딩 환경에서 사용하기 적합합니다.
2버퍼 메모리1KB 크기의 작은 문자(char) 버퍼를 사용합니다.Scanner에 비해 8KB 크기의 넉넉한 바이트(byte) 버퍼를 사용합니다.
3처리 속도읽은 데이터를 파싱(parsing)해야 하므로 상대적으로 느립니다.문자 스트림만 읽으면 되므로 Scanner보다 빠릅니다.
4주요 메서드nextInt(), nextShort() 등 타입별 입력 메서드를 제공합니다.parseInt(), parseShort() 등과 함께 래퍼(wrapper) 클래스를 이용한 변환이 필요합니다.
5한 줄 읽기nextLine() 메서드로 한 줄을 읽어옵니다.readLine() 메서드로 한 줄을 읽어옵니다.

Scanner vs BufferedReader 예제 코드

JavaTester.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class JavaTester {
   public static void main(String args[]) throws NumberFormatException, IOException {
      BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("Enter an number:");
      int a = Integer.parseInt(bufferReader.readLine());
      System.out.printf("You entered: " + a);
      Scanner scanner = new Scanner(System.in);
      System.out.println("\nEnter an number:");
      a = scanner.nextInt();
      System.out.printf("You entered: " + a);
   }
}

실행 결과

Enter an number:
1
You entered: 1
Enter an number:
2
You entered: 2

위 예제에서 볼 수 있듯이 BufferedReader는 readLine()으로 문자열을 읽은 후 Integer.parseInt()로 형 변환을 해야 하는 반면, Scanner는 nextInt()를 호출하는 것만으로 자동 파싱이 이루어집니다. 따라서 간편함이 중요하다면 Scanner를, 대량의 데이터를 빠르게 처리하거나 멀티스레드 환경에서 안전성이 필요하다면 BufferedReader를 선택하는 것이 좋습니다.