[Java] Scanner 과 BufferedReader 차이

언교동·2025년 4월 24일

JAVA

목록 보기
1/3
post-thumbnail

Scanner 이 BufferedReader 보다 사용하기 더 편리하지만, 성능적으로는 BufferedReader 이 더 좋다고 한다. 또한 코딩테스트에서는 시간 초과가 뜨지 않기 위해 BufferedReader 을 사용해야 한다는 말을 들어 공부하게 되었다.
각각의 사용법과 성능 차이의 이유에 대해 알아보자.

1. System.in 과 Reader 로 입력받기

  • System.in
    - 표준 입력 스트림: 프로그램이 데이터를 입력받는 기본 통로
    - InputStream 타입: 바이트 단위로 데이터를 읽는 클래스.

  • InputStreamReader
    : System.in(바이트 스트림)을 문자 단위로 읽을 수 있도록 변환해주는 클래스

  • BufferedReader
    : InputStreamReader 로 변환된 입력을 효율적으로 읽을 수 있도록 도와주는 클래스
    - readLine() 같은 메서드를 제공해서 한 줄씩 읽을 수 있음

<예제코드>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;


public class test{
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter your name: ");
        String name = bf.readLine();
        System.out.println("Your name is: " + name);
    }    
}

2. Scanner Class 로 입력받기

  • 기본 데이터 타입과 문자열을 읽는 편리한 방법 제공
  • String nextLine(), int nextInt(), float nextFloat() 사용 가능

<예제코드>

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = sc.nextLine();
        System.out.println("Your name is: " + name);
    }
}

BufferedReader 과 Scanner 비교

항목BufferedReaderScanner
기본 버퍼 크기8192 bytes1024 bytes
형 변환/토큰화 지원❌ 직접 파싱 필요 (String.split() 또는 StringTokenizer 사용)✅ 정규표현식을 통한 자동 파싱 지원
토큰화 방식없음 (직접 구현 필요)정규표현식을 사용하여 자동 토큰화
사용 예속도가 중요하거나 대용량 입력 처리 시 사용간단한 입력 처리나 편의성이 중요할 때 사용
입력 처리 흐름직접 문자열 읽고 직접 파싱nextInt() 호출 시:
1. 입력 읽기
2. 정규표현식 검사
3. 타입으로 파싱

결론

성능차이의 원인

  1. Scanner 의 정규표현식
    • Scanner 은 다양한 타입의 입력을 파싱할 수 있도록 정규표현식을 사용하는데, 이 과정에서 패턴 매칭 연산이 많아져 입력 처리 속도가 느려진다.
  2. 버퍼 크기의 차이
    • 버퍼를 이용하면 파일의 내용들을 버퍼 사이즈만큼 불러온 후 버퍼에서 변환 작업을 한다. BufferedReader 의 버퍼 크기가 Scanner 의 버퍼 크기보다 더 크기에 IO 작업 횟수가 더 줄어들어 상대적으로 더 빠르다.

참고자료
How to take input from user in Java using BufferedReader, Scanner and Console_youtube
BufferedReader와 Scanner의 성능 차이의 원인은?_tistory

0개의 댓글