이부분은 자바의 IO부분에 해당되는 얘기이다. 나는 지금까지 Scanner를 사용하는게 콘솔에서 입력을 할수있는 유일한 방법인 줄 알았다. 하지만, (여기에서 전부를 말하긴 힘들지만,) Scanner의 소스코드를 보면 일반 문자를 받고 if문을 돌려서 데이터타입이 int,String,double등등을 판별하여 값을 입력받는 것이기 때문에 시간이 상당히 오래걸리다고 보았다. 그래서 대부분 알고리즘 문제풀이에서 Scanner를 되도록 쓰지 않는다. 시간제한에 걸리기 때문이다.
그래서 버퍼리더와 버퍼라이터가 뭐길래 알고리즘에서 많이들 사용하는것이가?
한마디로 정리하자면, 우리가 만약 흙을 옮긴다고 치자면 Scanner같은 경우는 흙을 퍼서 바로바로 가져다 두는 형식이고 버퍼들은 수레에 흙을 최대한 모아놓은다음 그 흙을 한번에 옮기는 것이다. 현실적으로 생각해도 바로바로 퍼서 나르는 행동은 힘들기도 하고, 효율도 별로 좋지않다. 따라서 이정도로 Scanner와 버퍼의 효율이 차이나는 것이다.
이론적인 설명은 아래에 링크를 통해서 깊게 공부하길 바란다. 내가 작성한것을 보는것보다 더욱 정확하게 정리해놓은 블로그링크를 아래에 남기겠다.
Scanner가 작성하는데에는 더욱 편하다. 하지만, 시간단축과 메모리를 덜 사용하는 프로그램을 만들기 위해서 손에 익을때까지 코드를 작성하고 또 작성하자!
두개를 사용해보니 두가지 모두 한번에 모아서 출력하는 역활이 비슷해서 대체 두개의 차이가 무엇인지 궁금하여 구글링을 해보았다.
BufferedWriter는 여러 곳에서 동시에 같은 문자열 인스턴스에 접근할 때 중복 점유를 막을 수 있는 장치가 되어 있다. 즉, 동기화 처리 때문에 StringBuilder에 비해 좀 더 무겁다.
따라서 특별한 사유(쓰레드)가 없다면, StringBuilder를 사용하는것이 일반적이다.