[Java] Scanner VS BufferReader

developer_·2024년 7월 12일

Java

목록 보기
1/1

스캐너와 버퍼리더의 차이?

항상 코딩테스트를 공부할 때 시간초과가 촉박하지 않은 문제들은 scanner를 사용하곤 했는데,
백준 푸는 난이도가 높아질수록 항상 시간초과가 발생해서 bufferReader를 사용하는 습관을 들여야 겠다고 생각했다.

대략적으로 알고는 있지만, scanner와 bufferReader의 차이를 정확하게 잘 모르겠어서
이번 포스팅을 작성하면서 공부를 해보려고 한다.

Scanner

Scanner는 입력받은 데이터를 다양한 타입으로 변환하여 반환한다.

scanner의 특징

  • 공백 및 개행을 기준으로 읽는다. (백준 문제 배열처리할 때 자주 헷갈림)
  • 데이터를 입력받을 경우 즉시 사용자에게 전송되며 입력받을 때 마다 전송되어야하기에
    많은 시간이 소요가 된다. -> 코딩테스트 때 bufferReader를 써야하는 이유

import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String st = sc.nextLine();

Buffreader

데이터를 한번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식으로 동작하는 클래스이다.
사용자가 입력한 스트림을 한꺼번에 읽는다.

bufferReader의 특징

  • 데이터를 파싱하지 않고 String으로만 읽고 가져온다.
  • Checked Exception으로 반드시 예외 처리를 명시해야한다. (I/0 Exception)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
...
public static void main(String[] args) throws IOException {
  BufferReader br = new BufferedReader(InputStreamReader(System.in));
  String st = br.readLine();

  int a = Integer.parseInt(br.readLine());
  int b = Integer.parseInt(st);
}

Scanner와 BufferReader의 차이점

내가 생각할 땐 Scanner는 사용하기 간편한 대신에, 메모리 용량, 처리속도가 느려서 빠른 실행시간을 요구하는 코딩테스트에 적합하지 않다고 생각한다.
BufferReader는 사용하기 복잡한 대신, Scanner보다 훨씬 처리 속도가 빠르기 때문에 코딩테스트에 주로 사용이된다.

더 구체적으로
BufferReader는 입력사항을 String으로만 받는다.
내가 int 형을 입력받고 싶은데 br를 사용하려면 형변환을 무조건 해줘야한다.

반면, Scanner는 각각의 자료형에 맞게 입력을 받을 수 있는 메소드가 존재한다.

상황에 따라 간편하게 Scnner를 사용할 수 있겠지만, bufferReader를 사용하는 연습을 더 해야겠다.


참조자료
[https://velog.io/@gawgjiug/%EC%9E%90%EB%B0%94JAVA-Scanner-BufferedReader]

0개의 댓글