[JAVA] BufferedReader 클래스

Minha Ahn·2023년 4월 20일
1

✅Scanner 클래스

자바에서 사용하는 여러가지 입력 방법 중 가장 쉬운 방법 중 하나가
Scanner 클래스를 이용하는 방법일 것이다.

Scanner 클래스는 white-space(공백, 개행 등)를 기준으로 읽는 방법으로
쉽게 입력을 받을 수 있어서 내가 즐겨 사용하는 방법이었다.

🙁Scanner 클래스의 단점

하지만 Scanner 클래스의 단점이 존재한다.
바로 속도의 문제이다.

Scanner는 입력을 읽는 동안 정규식 적용과 파싱 과정을 거치게 된다.
이런 과정을 거치면서 속도가 매우 느려졌으며
실행 속도가 중요한 백준에서는 Scanner를 쓰면 시간 초과 결과가 나오는 경우가 빈번하다.

그래서 추천하는 방식이 BufferedReader이다.

✅BufferedReader 클래스

BufferedReader는 입력을 버퍼에 담아두었다가 한번에 전송하는 방식이다.
덕분에 Scanner에 비해서 빠른 속도가 장점이다.

BufferedReader의 특징으로는 개행문자만 기준으로 읽고
데이터 형식은 무조건 String으로 고정된다는 점이 있다.
하지만 BufferedReader를 사용하기 위해서 추가적으로 사용해야하는 것들이 있다.
바로 데이터 형변환, StringTokenizer와 예외처리이다.

아래는 BufferedReader를 사용하는 방법이다.
BufferedReader br = new BufferedReader(System.in);

✅데이터 형변환

위에서 BufferedReader의 특징으로 모든 입력을 String으로 받는다고 언급했다.
때문에 원하는 데이터로 변환하는 과정이 필요하다. (String은 굳이 필요 없다.)

예를 들면 아래와 같다.
int num = Integer.parseInt(br.nextLine());

✅StringTokenizer

BufferedReader는 입력을 받을 때 readLine() 메소드로
개행문자를 기준으로 읽기 때문에 다수개의 데이터를 입력받을 땐
StringTokenizer로 데이터를 분리해주는 작업이 필요하다.

아래의 코드는 공백으로 구분되어 입력된 값들을 분리하기 위한 코드다.
StringTokenizer st = new StringTokenizer(br.readLine(), " ");

이렇게 분리된 토큰을 저장하는 방법은 아래와 같다.
int num = Integer.parseInt(st.nextToken());

✅예외처리

BufferedReader를 사용하려면 예외처리는 필수이다.
System.in의 결과로 null이 오게되면 (Reader가 프로그램에 인식되지 않는 경우 발생)
IOException을 던지는 구조로 되어있다.
때문에 IOException 처리를 하는 thorws IOException을 사용해야 한다.
throws IOException을 사용하는 방식은 메인문 중괄호 시작 전에 언급하면 된다.

public class Main {
    public static void main(String[] args) throws IOException {
        ...
}
profile
프론트엔드를 공부하고 있는 학생입니다🐌

0개의 댓글