알고리즘 공부하다가 Scanner를 사용해야 하는 일이 많았는데, 여러 예제를 풀고 찾아보니 BufferedReader가 더 성능이 좋다는 사실을 알게 되었다.
Scanner와 BufferedReader. 용도는 같지만 성능 차이가 나는 이유는 무엇일까? 사용하는 “Buffer” 의 용량 차이 때문이다.
BufferReader → 데이터 양이 많아질수록 성능차이는 커진다.
버퍼는 입력할 때마다 값을 전달하는 것이 아니라, 버퍼 용량 만큼 차곡차곡 모아뒀다가 한 번에 전달해준다. ex. 흙을 옮길 때, 한 삽씩 떠서 옮기는 것보다 수레에 담아 옮기는 쪽이 훨씬 빠르고 효율적일 것이다.
✓ buffer 사용하지 않는 입력 : 즉시 전달 ✓ buffer 사용하는 입력 : 버퍼가 가득 차거나 개행문자가 나타나면 한 번에 전송
Scanner는 1KB크기의 버퍼를 가지고 있기에 입력이 즉시 전달되는 반면, BufferReader는 8KB크기의 버퍼를 가지고 있어 잠시 저장했다가 한 번에 전송할 수 있어 성능이 더 좋다.
- Buffer : 데이터를 전송하는 동안 일시적으로 보관할 수 있는 임시저장소
Scanner는 띄어쓰기와 개행문자를 경계로 값을 인식하기 때문에 따로 가공할 필요가 없어 편리하다.
하지만 BufferedReader는 입력 받은 데이터가 String으로 고정되기 때문에 데이터를 원하는 타입으로 가공하는 작업이 필요하다.
Scanner는 지원하는 메서드가 많고 사용하기 쉽지만, 버퍼 사이즈가 1024 char이기에… 많은 입력을 필요로 할 경우 성능상 좋지 못한 결과를 낳는다.