개요
Scanner와 BufferedReader는 모두 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
BufferedReader는 InputStream과 함께 사용하여 입력을 빠르게 처리한다.
한 번에 대량의 데이터를 입력받아 읽는 데 최적화되어 있으며, 파일에서 데이터를 읽거나 많은 데이터를 입력받아야 할 때 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
복사
Scanner와 BufferedReader 비교
특징 | Scanner | BufferedReader |
입력 방식 | 토큰 단위로 입력을 쉽게 분리 (nextInt(), nextLine() 등) | 문자열 단위로 입력 (readLine() 메서드) |
성능 | 상대적으로 더 느림 (정규식을 사용한 내부 파싱 작업 수행) | 상대적으로 빠름 (버퍼 크기가 크기 때문에 효율적) |
편의성 | 다양한 기본형 입력 지원 (정수, 실수, 문자열 등) | 문자열만 입력받음 (추가 변환 작업 필요) |
사용 목적 | 간단한 입력 처리 (콘솔에서 데이터 입력받기 등) | 대용량 데이터나 파일 읽기, 성능이 중요시 되는 경우에 사용 |