표준입출력으로 많이 사용하는 Scanner 와 BufferedReader간의 차이에 대해서 알아보고자
한다.
먼저 Scanner는 Java1.5 버전 이후에 생겨난 클래스이다. Scanner 는 일단 아주 편리하다.
FileStream 이든 사용자 입출력이든 String이든 선언하는데로 읽어 들일 수 있다.
그러나 이 과정에서 regular expression을 생성하고 parsing하고 error 검출 까지하는 등
부과적인(편리한?) 기능들이 많이 추가 되있기 때문에 수행시간에 있어서는 굉장히 많이
느리다. 또한 동기화 과정이 들어가지 않기 때문에 multi - threading 환경에서는
not - safe 하다. 하지만 Scanner의 장점은 강력한 parsing 기능을 제공하는 장점도 있다.
그러나 , BufferedReader는 Exception핸들링도 직접 해주어야 하고 , inputstream에서 부터
문자 기반 스트림(=BufferedReader)까지 직접 생성하고 설정을 해주어야 하는 번거로움이
있지만 multi - threading 환경에서 safe하고 , 수행시간이 훨씬 단축 된다는 장점이 있다.
단점은 모두 String으로 읽기 때문에 읽은 데이터에 대해서 parsing하고 형변환을
하는 것은 User-dependency이다.
" 개인적인 느낀점 "
개발을 하는 입장에서 사용하기 편리한 것이 마냥 좋은 것만은 아닌 것 같다. 처음 이사실을
몰랐을 땐 수행시간에 대해서 왜이렇게 차이가 날까라고 생각했지만 , 위와 같은 사실을
알게 되니 좀더 세세하게 알아야 할 것들이 많다고 느꼈다.
사실 요즘 세상에 multi - threading 환경을 사용하지 않는 프로그램은 없기 때문에
이런거 저런거 생각해봤을땐 내가 코드 몇 줄 더 쓰더라고 이런 것에 익숙해 지는게
좋을 것 같다. 만약에 그게 아니더라도 이러한 사실을 알고 모르고의 차이는 크다고
생각한다.
댓글 없음:
댓글 쓰기