Java Study

Scanner VS BufferedReader 의 차이

Z00_HWAN_99 2024. 6. 19. 18:53
728x90
반응형

백준, 정올, 프로그래머스 등 다양한 사이트에서 알고리즘 문제를 풀다 보면 입력값을 토대로 결과값을 도출해내는 게 거의 대다수를 차지한다는 것을 알고 계실 것이라 생각합니다. 그렇다면 혹시 여러분들은 입력 받으실 때, scanner를 많이 쓰시나요, 아니면 bufferedReader를 많이 쓰시나요? 이런 것도 사용하실 때 각각의 특징, 차이점과 유용성을 알아야 된다고 생각하여 이번 글에서 설명해보도록 하겠습니다.

 

BufferedReader이란?

  • 문자 입력 스트림에 버퍼링 기능을 제공하는 클래스.
  • 입력 소스로부터 데이터를 효율적으로 읽어오기 위해 사용.
  • 주로 파일, 네트워크 연결 등의 입력 소스에서 데이터를 읽어올 때 유용하게 사용됨.

BufferedReader의 주요 특징?

  • 버퍼링을 통해 효율적으로 읽어올 수 있음.
  • read() 메서드를 통해 한 문자씩 읽거나,  readLine() 메서드를 통해 한 줄씩 읽을 수 있음.
  • 데이터를 읽어오는 동안 IO 작업이 발생하므로, 성능이 중요한 시나리오에서 유리함.

BufferedReader 사용 예시

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        System.out.println(n);
    }
}

 

 

Scanner란?

  • 입력 스트림에서 파싱 작업을 수행하며 원시 타입 데이터 및 문자열을 읽어오는 데 사용되는 클래스.
  • BufferedReader보다는 덜 효율적이지만, 간단한 데이터 파싱 및 특정 데이터 타입의 입력 처리에 유용.

Scanner의 주요 특징?

  • 공백이나 구분자를 기준으로 데이터를 토큰(token) 단위로 분리하여 읽어올 수 있음.
  • 다양한 타입의 데이터를 입력 받을 수 있음. ex) nextInt(), nextDouble(), nextLine() etc
  • BufferedReader에 비해 사용하기 간편하며, 간단한 데이터 파싱에 유리함.

Scanner 사용 예시

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(n);
    }
}

 

차이점

  • 버퍼링 : BufferedReader은 데이터를 읽을 때 버퍼를 사용하여 효율적으로 처리할 수 있지만, Scanner는 내부적으로 버퍼를 사용하지 않음.
  • 파싱 기능 : Scanner는 입력 데이터를 통해 특정 타입으로 읽을 수 있는 메소드를 제공하며, 데이터 형식을 쉽게 변활할 수 있음. 반면 BufferedReader은 데이터를 문자열로 읽어오고, 필요에 따라 직접 변화해야 함.
  • 사용 용도 : BufferedReader은 성능이 중요한 대용향 데이터 처리 시나리오에서 유리함. Scanner은 입력 데이터를 간단히 파싱하고 특정 데이터 타입으로 변환할 때 유용함.

이렇게 둘은 다양한 차이점이 존재하는 것을 알 수 있었습니다. 그러므로 당연히 상황에 따라 scanner 혹은 bufferedReader를 적절히 사용해야하지만, 데이터의 양이 많거나 많은 트래픽을 요구하는 과정에서는 bufferedReader를 사용하는 것이 효율적일 것이라고 보입니다.

 

https://github.com/bottomsUp-99

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'Java Study' 카테고리의 다른 글

메서드 오버로딩(Method Overloading)이란?  (0) 2024.06.20
메서드(method)란?  (0) 2024.06.20
Integer VS int 의 차이  (0) 2024.06.18
Java 조건문과 반복문  (0) 2024.06.18
Maven 과 Gradle의 차이  (2) 2024.06.17