언어/JAVA

Scanner와 BufferedReader의 차이

벨포트조던 2016. 11. 29.
반응형

http://blog.naver.com/PostView.nhn?blogId=crazydeicide&logNo=130115264169




흠...전에 포스팅 했던 것도 있고, 기왕 포스팅 한것 조금 더 자세히 써보자라는 의미에서의 포스팅

 

Scanner와 BufferedReader의 차이는 일단

Java 예전 버전에선 BufferedReader를 사용하다가

새로 나온것인 Scanner라는 점.

 

당연히 예전 코드에서는 BufferedReader가 주로 사용되었지만,

요즘은 Scanner가 사용된다는 사실.

 

 

 

두번째론 자료를 입력받는 방식에서 차이가 있다는 점.

Scanner는 뒤에 메소드를 어떤 점을 사용하느냐에 따라,

(일단 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 으로 선언하고

Scanner scan = new Scanner(System.in); 으로 선언한다 했을 때 )

 

scan.next() - String 형

scan.nextInt() - Int 형

scan.nextDouble() - Double형

scan.nextBoolean() - Boolean 형

이렇게 세분화 시켜서 데이터를 입력 받을 수 있다는 점.

 

BufferedReader는 기본적으로 String 타입으로 데이터를 입력받게 되어

이렇게 입력받은 값을 다시 다른 형으로 변환해줘야 하는 번거로움이 있다.

reader.readLine() - String 형

Integer.parseInt(reader.readLine()); - int 형 과 같은 식으로 말이다.

 

또 BufferedReader는 사용하기 위해 import도 BufferedReader와 InputStreamReader 2개를 불러와야 하지만

Scanner는 Scanner 하나만 불러오면 된다는 차이도 있다.

 

거기다가 BufferedReader는 throws Exception을 선언해 주어야지만 에러 없이 사용 가능 하기 때문에

실질적으로 Scanner보다 손도 훨씬 많이 가고, 장점이 별로 없다 할 수 있다.

 

그럼 훨씬 손이 덜 가는 Scanner 만 사용하면 되느냐!! 이건 또 아닌게

다른 아주 중요한 차이를 가지고 있기도 하다.

그건 바로 String 형을 입력시 SpaceBar를 인식하는 방법의 차인데 이게 무슨 소리냐면

 

BufferedReader로 String형을 입력 시 SpcaeBar를 String형으로 인식하여 함께 입력을 받을 수 있는데,

Scanner로 String형을 입력 시 SpaceBar를 쓰면 2개의 String형으로 인식한다는 의미이다.

 

예를 들어, "안녕 하세요"를 입력한다면,

String a = reader.readLine();을 통해 입력 받은 값이 "안녕 하세요" 이면

System.out.println(a); 를 통해 "안녕 하세요" 가 출력이 되지만,

String b= scan.next(); 을 통해 입력 받은 값이 "안녕 하세요"이면

System.out.println(b);를 통해 "안녕" 만이 출력이 됩니다.

 

이 차이를 잘 알아 봅시다~~


반응형

댓글