Scanner vs BufferedReader, 입력은 어떤 것으로?

감자튀김·2024년 3월 28일
1

Java

목록 보기
1/2

코딩 테스트를 푸는데 팀원이 걸린 시간보다 내 풀이의 시간이 훨씬 느렸다.
둘의 차이를 다뤄보겠다.

java.util.Scanner

  • 화면, 파일, 문자열과 같은 입력소스로부터 문자 데이터를 읽어 올 목적으로 추가된 클래스
  • 여러 타입으로 입력 받을 수 있다.
  • 토큰화 해서 받을 수 있다.
  • 정규식 표현으로 라인 단위의 검색을 할 수 있고, 정규식 표현을 구분자로 사용할 수 있어서 복잡한 형태의 처리도 가능하다.

java.io.BufferedReader

Buffer: 바이트배열

  • 버퍼를 이용해서 입력의 효율을 높일 수 있도록 해주는 역할을 하는 클래스
  • 문자 스트림만 처리할 수 있다.
  • 라인 단위로 읽기만 가능하다.
  • 내부 버퍼를 사용하여 한 번에 많은 데이터를 읽어들여서 디스크 I/O 작업 수를 줄일 수 있다.
    ⇒ 그렇기 때문에 Scanner보다 성능이 우수

성능 비교


1번이 Scanner 클래스
2번이 BufferedReader 클래스

값을 한 라인만 입력 받는 문제였는데도 성능 차이가 있다.
더 많은 입력을 받는 문제는 더 많이 차이가 날 것이다.



End Of File

데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타내는 용어

Scanner와 BufferedReader는 조건을 걸어서 멈출 수 있다.

Scanner

Scanner sc = new Scanner(System.in);
sc.hasNext();

BufferedReader

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

IDE 콘솔에서 입력 멈추는 법

나는 코딩 테스트를 제대로 푸는게 이번이 처음이다.
인텔리제이에서 풀이 코드를 작성하고 입력을 하려는데 입력이 끝나지 않는 곤란한 일이 있었다.
이 글을 보는 사람이 그런 일을 겪지 않았으면 좋겠어서 추가로 남겨둔다.

맥: command + D
윈도우: Ctrl + D

콘솔에서 필요한 값을 모두 입력하고 해당 단축키를 누르면 입력이 종료된다!


참고

profile
아좌좌좟

0개의 댓글