java 표준입출력 (Scanner vs BufferedReader)

홍성우·2023년 2월 19일

JAVA 기술면접

목록 보기
3/3
post-thumbnail

Scanner, BufferedReader를 활용하여 알고리즘 입출력을 처리했다.
하지만 Scanner,BufferedReader의 차이점을 알고 사용하지 않은것 같아 차이점을 정리해 보려고 한다.

결론적은
BufferedReader > Scanner가 속도 측면에서 빠르므로 BufferedReader를 사용한다.

속도 비교
출처 : https://www.acmicpc.net/blog/search/%EC%9E%85%EB%A0%A5+%EC%86%8D%EB%8F%84

이유를 살펴보자
두가지의 공통점은 사용자로 부터 입력(키보드)을 받는 것이다.

1. BufferedReader

차이점은 (Buffer)버퍼의 사용여부이다.
BufferedReader는 사용자의 입력을 buffer라는 공간에 입력을 받고 출력시 한번에 출력하는 것이다.
(버퍼 공간에도 사이즈가 존재 => 버퍼에 크기가 다 차면 출력)

즉 한번에 입력을 전부 받고, 한번에 출력하는 것이다.

버퍼의 크기를 살펴보자.

먼저 이러한 형태로 선언 했을것이다.
매개변수로 InputStreamReader를 볼수 있다.
InputStreamReader() 매개변수로 System.in이라는 클래스가 정의 되어 있다.

System.in 은 사용자로 부터 입력을 받을수 있는 클래스이다.
(System.in만으로도 사용자로 부터 입력을 받을 수 있다)

BufferedReader의 매개변수인 InputStreamReader 클래스를 살펴보자

InputStreamReader 생성자에 InputStream클래스가 존재한다.

InputStream클래스의 필드에 DEFAULT_BUFFER_SIZE = 8192(약 8KB)

즉 Buffer의 크기는 8KB까지 입력 받을 수 있다.

(InputStream은 java.io패키지의 byte단위 입력을 위한 최상위 입력 스트림 클래스이다.)

그리고 BufferedReader를 사용시 throws 예외처리를 해주어야한다.
그 이유는? - 사용자의 잘못된 입력값을 방지하기 위해

2. Scanner

Scanner를 사용하려면 매개변수로 System.in을 사용하여 표준입력을 받는다.
Scanner의 버퍼의 크기는 1KB이고, 입력이 바로 전달된다.
이러한 측면에서 Buffer( 8KB )를 사용하는 BufferedReader보다 느리다.

[Scanner 내부구성]


Scanner를 따라가보면 내부에 InputStreamReader가 존재하고,
빨간색줄과 같이 내부적으로 정규식,파싱 과정을 검사한다.
그리고 내부적으로 try~catch문이 존재하므로 BufferedReader와 같이 throws 예외처리를 하지않아도 된다.

profile
제 블로그를 방문해 주셔서 감사합니다

0개의 댓글