Search

Scanner VS BufferedReader

개요

ScannerBufferedReader는 모두 Java에서 콘솔로부터 입력을 받을 때 사용하는 클래스이다.
이 둘은 사용 방식과 성능 측면에서 차이가 있다. 각 차이점을 분석하고 어떤 상황에 어떤 클래스를 사용해야할지 알아보자

Scanner

Scanner는 주로 콘솔에서 간단한 입력을 받을 때 적합하며, 공백이나 줄 바꿈을 기준으로 데이터를 손쉽게 분리할 수 있다.
다양한 형식의 입력을 편리하게 처리할 수 있는 기능 nextInt(), nextLine(), nextDouble()을 제공한다.
하지만 내부동작에서는 정규 표현식을 사용하여 데이터를 파싱하기 때문에 상대적으로 느릴 수 있다.
Scanner 사용 예시
import java.util.Scanner; public Class Main() { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 정수 입력 System.out.println("숫자를 입력하세요"); int inputNumber = sc.nextInt(); // 공백 기준으로 문자열을 입력 System.out.println("문자열을 입력하세요"); String inputText = sc.next(); // 한 줄 입력 System.out.println("한 줄을 입력하세요"); sc.nextLine(); // 버퍼 비우기 String inputLine = sc.nextLine(); // 스캐너 종료 sc.close(); } }
Java
복사

BufferedReader

BufferedReaderInputStream과 함께 사용하여 입력을 빠르게 처리한다.
한 번에 대량의 데이터를 입력받아 읽는 데 최적화되어 있으며, 파일에서 데이터를 읽거나 많은 데이터를 입력받아야 할 때 Scanner보다 효율적이다.
다만 BufferedReader는 문자열을 입력받는 readLine() 메서드만 제공하기 때문에 숫자나 다른 형식의 데이터로 변환하려면 추가 작업이 필요하다.
BufferedReader 사용 예시
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main() { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { // 정수 입력 후 파싱 System.out.println("정수를 입력하세요"); int inputInt = Integer.parseInt(br.readLine()); // 문자열 입력 System.out.println("문자열을 입력하세요"); String inputString = br.readLine(); // 한 줄 입력 System.out.println("한 줄을 입력하세요"); String inputLine = br.readLine(); br.close(); } catch(IOException e) { e.printStackTrace(); } } }
Java
복사

ScannerBufferedReader 비교

특징
Scanner
BufferedReader
입력 방식
토큰 단위로 입력을 쉽게 분리 (nextInt(), nextLine() 등)
문자열 단위로 입력 (readLine() 메서드)
성능
상대적으로 더 느림 (정규식을 사용한 내부 파싱 작업 수행)
상대적으로 빠름 (버퍼 크기가 크기 때문에 효율적)
편의성
다양한 기본형 입력 지원 (정수, 실수, 문자열 등)
문자열만 입력받음 (추가 변환 작업 필요)
사용 목적
간단한 입력 처리 (콘솔에서 데이터 입력받기 등)
대용량 데이터나 파일 읽기, 성능이 중요시 되는 경우에 사용