Java에서 입력을 원할 때, 기본적으로 Scanner와 BufferedReader 클래스를 이용해서 받아올 수 있다.
다음의 코드처럼 받아올 수 있다.
-Scanner-
Scanner sc = new Scanner(System.in);
-BufferedReader-
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
여기서, InputStreamReader라는 것이 문자를 하나하나 읽어들이고,
BufferedReader가 그 문자들을 문자열로 만들어준다.
Scanner와 BufferedReader은 모두 버퍼를 이용해서 입력값을 저장한다.
둘의 차이점은 버퍼의 크기이다.
Scanner 버퍼 크기 : 1024chars
BufferedReader 버퍼 크기 : 8192chars
버퍼가 크다는 것은 더 많은 입력값을 한 번에 처리할 수 있다는 것이므로,
BufferedReader는 Scanner에 비해 확실히 처리 속도가 빠르다.
그럼 Scanner는 왜 쓰지?
Scanner에서는 예외 처리를 숨겨주는 장점이 있다.
BufferedReader에서는
반드시 BufferedReader를 사용하는 모든 함수 옆에 'throws IOException'을 써서 예외 처리를 해주어야 한다.
또, 자료형 변환에 있어서도 Scanner는 장점을 가진다.
다음 예시 코드들을 보자.
BufferedRead를 통해 입력받은 값들은 자료형 변환을 위해, 각각의 자료형으로 한 번 더 고쳐야 된다.
하지만, Scanner는 간단하게 원하는 자료형으로 입력받는 것이 가능하다.
둘 다, 장단점이 있기 때문에 상황에 따라 적절하게 사용하면 좋을 것 같다.
BufferedReader는 동기화가 가능하기 때문에,
순차적으로 진행되는 프로그램에는 Scanner보다 BufferedReader를 사용하면 더 좋다.
(참고 : https://blog.crazzero.com/m/15)
추가)
BufferedReader의 경우 close() 메소드를 명시해주지 않아도, Garbage Collector에 의해 BufferedReader 및 내부의 객체들이 자동으로 정리된다.
Garbage Collectore에 의해 자원이 정리되기 전에 BuffererdReader가 사용된다면 close하는 구문을 추가해주어야 한다.
'Develop > Java' 카테고리의 다른 글
클래스(Class)와 객체(Object)란? (0) | 2022.09.05 |
---|---|
int형의 숫자와 String형의 문자열을 더하면? (0) | 2022.09.04 |
Java : 입출력 예외 처리 (throws IOException) (0) | 2022.09.03 |
오버로딩(Overloading) vs 오버라이딩(Overriding) (1) | 2022.09.02 |
Scanner 사용 시, next()와 nextLine()의 차이 (0) | 2022.08.31 |