Scanner
에서 BufferedReader
로 바꾸어 보았더니 성공했다,,! 그래서 이번 기회에 두 입력 방식의 차이를 기록해보고자 한다. ✒️✒️입력받은 데이터(바이트)를 다양한 타입으로 변환하여 반환하는 클래스
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
System.out.println("입력받은 문자열: " + line);
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
dobule m = scanner.nextDouble;
int[] numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}
System.out.println(Arrays.toString(numbers));
System.out.println(m);
데이터를 한번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식으로 동작하는 클래스
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
System.out.println("입력받은 문자열: " + line);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
double m = Double.parseDouble(reader.readLine());
int[] numbers = Arrays.stream(reader.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(numbers));
System.out.println("입력받은 실수: " + m);
기능 | Scanner | BufferedReader |
---|---|---|
속도 | 상대적으로 느림 | 상대적으로 빠름 |
대량의 데이터 처리 | 비효율적 | 효율적 |
사용의 용이성 | 사용하기 쉬움 | 사용하기 어려움 (추가 파싱 필요) |
버퍼 사용 | 내부적으로 사용하지만 사용자가 제어 불가 | 명시적으로 버퍼 사용, 크기 조절 가능 |
입력 타입 다양성 | 다양한 입력 타입을 메서드로 직접 지원 | 주로 문자열 입력 후, 타입 변환을 통해 다른 타입으로 처리 |
정규 표현식 지원 | 지원 (delimiter 설정 가능) | 지원하지 않음 |
라인 단위 처리 | 라인 단위 입력 처리가 번거로움 (nextInt 후 nextLine 사용 시 주의 필요) | 라인 단위 입력에 최적화 |
Scanner
를 사용하는 것이 좋고, 대량의 데이터 처리 속도가 중요한 어플리케이션에서는 BufferedReader
를 사용하는 것이 더 효율적이다.