yeo72.devlog

[Java]Scanner 와 BufferedReader의 차이 본문

Study/Java

[Java]Scanner 와 BufferedReader의 차이

짱이08 2023. 3. 15. 11:31

두가지 모두 Java 에서 값을 입력 받는 데 사용되는 클래스이다
알고리즘을 풀기 위해서 입력받을 값을 사용할때 이 클래스들을 사용한다.

 

아래로는 두 클래스의 차이점과 어떤 클래스를 사용하는것이 유리할 지에 대하여 설명한다.

 

차이점 scanner BufferedReader
입력받는 방식 공백, 개행등의 구분자 사용하여 값을 구분 한 줄씩 값을 구분
입력값의 형태 다양한 형태의 값(정수, 실수, 문자열 등등) 문자열
성능 상대적으로 느림 빠름

 


 

import java.util.*;

public class Main {
    public static void main(String[] args) {

        //스캐너 객체를 생성
        Scanner s = new Scanner(System.in)

        //정수형 변수 입력받기
        int num = s.nextInt();

        //실수형 변수 입력받기
        double dNmu = s.nextDouble();

        //문자열 입력받기
        String str = s.nextLine();

        //입력 스트림 닫기
        s.close()
    }
}

 

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{

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

        //변수 입력받기
        String str = br.readLine();

        // 정수형 변수 -> 문자열로 입력 받은 것을 형변환 해준다
        int num = Integer.ParseInt(str);

        //입력 스트림 닫기
        br.close();
    }
}

 

두가지 코드를 비교해 보면 Scanner 의 경우 값을 입력 받을때 형태에 대해서 다르게 입력을 받는 것을 볼 수 있다
반면에, BufferedReader는 문자열로 입력을 받고, 이를 적절한 형태로 형변환 하여 사용한다.

 

 


BufferedReader를 사용하는 이유

 

BufferedReader는 한 줄씩 입력받기 때문에 공백이나 개행 문자와 상관없이 원하는 형태로 값을 입력받을 수 있다.
반면 Scanner는 값을 입력받을때 공백이나 개행 문자로 구분해줘야 한다

 

Scanner는 값을 입력받아 읽어올때 형태에 따라 다르게 처리를 할 수 있다.

(위에 나온 예시처럼 정수, 실수, 문자열 등으로 변수의 형태를 지정)
이 때문에 정규식 처리 등의 추가적인 작업을 한다.

BufferedReader 는 문자열 형태로만 값을 읽어오기 때문에 처리 속도가 빠르다.

 

또한 메모리 사용량에도 차이가 나는데

Scanner 는 다양한 형태의 입력값을 처리하기 위해 입력값을 내부 버퍼에 저장하고,

BufferedReader는 입력값을 한 줄씩 읽어오기 때문에 내부버퍼를 사용하지 않는다

 

이러한 차이점으로 입력 값이 크거나 빠른 속도가 필요할 경우 BufferedReader 를 쓰는 것이 유리하다