Baekjoon

BufferedReader와 StringTokenizer vs Scanner 차이점

kanado 2024. 10. 4. 23:24


코딩 테스트를 준비하면서 자바(Java)에서 입력을 처리하는 방법에는 여러 가지가 있는데, 그 중에서도 가장 많이 사용되는 두 가지 방법이 있다. 하나는 `BufferedReader`와 `StringTokenizer`의 조합이고, 다른 하나는 `Scanner` 클래스다. 이 두 가지 방법에는 각각의 장단점이 있어 상황에 따라 선택해야 한다.


1. BufferedReader와 StringTokenizer

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

특징

BufferedReader는 버퍼를 사용하여 입력을 처리하기 때문에 대용량 데이터를 읽을 때 효율적이다. br.readLine()을 사용하여 한 줄 전체를 문자열로 읽어는다. 읽어온 문자열을 원하는 형태로 변환하기 위해 StringTokenizer나 split() 메서드를 사용한다.

장점

  • 입력 데이터를 원하는 방식으로 파싱하여 사용할 수 있습니다.
참고: 파싱은 문자열을 원하는 데이터 구조나 타입으로 변환하는 과정

단점

  • IOException에 대한 예외 처리를 반드시 해야 합니다.

2. Scanner 

특징

다양한 타입의 입력을 손쉽게 받을 수 있는 메서드를 제공하며 공백이나 개행을 기준으로 입력을 분리하여 읽어온다.

장점

  • 입력받은 데이터를 바로 원하는 타입으로 변환하여 사용할 수 있다.
  • 별도의 파싱 과정 없이 메서드 호출만으로 입력을 받을 수 있다.

단점

  • 내부에서 정규식을 사용하기 때문에 입력 처리 속도가 상대적으로 느림
  • Scanner는 많은 메모리를 사용.

3. 성능 비교 및 결론

입력 속도 테스트

  • BufferedReader: 빠른 속도로 입력을 처리할 수 있다.
  • Scanner: 편의성은 높지만, 속도는 느리다.

코딩테스트 문제에서는 웬만하면 BufferedReaderStringTokenizer를 씁시다.

 

끝.