입력을 처리하는 방법 중 가장 많이 사용되는 클래스가
BufferedReader, Scanner이다.
BufferedReader, Scanner 특징
BufferedReader
- 입력을 버퍼링 하여 빠르게 읽음
- readLine()을 사용해 한 줄씩 읽을 수 있음
- 멀티스레드 환경에서 안전하게 사용 가능
Scanner
- 사용 비교적 간편
- 문자열 뿐 아니라 파일, 콘솔 등 다양한 입력 가능
- nextLine(), nextInt(), nextTokenizer() 등 다양한 타입을 입력받을 수 있다.
- 멀티스레드 환경에서는 부적합
- 정규표현식 지
<BufferedReader 예시>
// 임포트 필요
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
// 입력 받기 위한 변수 선언
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Enter your name: ");
String name = reader.readLine(); // 한 줄씩 입력
System.out.println("Hello, " + name + "!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
<Scanner 예시>
// 임포트 필요
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// 입력 받기 위한 변수 선언
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
}
}
비교
특징 | BufferedReader | Scanner |
입력속도 | 더 빠름 | 비교적 느림 |
사용 용이성 | 복잡 (예외처리, 입력타입 문자열 뿐) | 간편 (다양한 메서드 제공) |
데이터 타입 | String | 다양 (int, double,String 등) |
정규 표현식 | 지원 X | 지원 |
멀티스레드 환경 | 멀티스레드에서 안전 | 멀티스레드에서 위험 |
속도차이가 나는 이유는 Buffer 사용 여부 차이, 정규표현식 적용 과정 여부 등 때문
여기서 Buffer란 데이터를 일시적으로 저장하는 메모리 공간을 말함.
BufferedReader는 8KB 크기의 버퍼에 저장되었다가 한 번에 전송하는 방식이고
Scanner는 입력에 바로바로 전송되는 방식
바로바로 전송되는 것보다 여러개 묶어서 보내는 것이 더 효율적이라는 원리.
결론
BufferedReader는 데이터 입력이 많거나 멀티스레드 환경, 빠르고 효율적인 처리가 필요할 때 사용
Scanner 다양한 데이터 타입을 입력할 수 있어 간편하므로 간단한 입력 처리인 경우에 용이
웬만하면 BufferedReader 사용하는 것으로 하자..