자바: BufferedReader , Scanner

친환경 개발자
|2024. 5. 27. 22:26


입력을 처리하는 방법 중 가장 많이 사용되는 클래스가

BufferedReader, Scanner이다.

 

BufferedReader, Scanner 특징

BufferedReader

- 입력을 버퍼링 하여 빠르게 읽음

- readLine()을 사용해 한 줄씩 읽을 수 있음

- 멀티스레드 환경에서 안전하게 사용 가능

 

Scanner

- 사용 비교적 간편

- 문자열 뿐 아니라 파일, 콘솔 등 다양한 입력 가능

- nextLine(), nextInt(), nextTokenizer() 등 다양한 타입을 입력받을 수 있다.

- 멀티스레드 환경에서는 부적합

- 정규표현식 지

 

 

<BufferedReader 예시>

// 임포트 필요

import java.io.BufferedReader;      

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

public class BufferedReaderExample {
    public static void main(String[] args) {
        // 입력 받기 위한 변수 선언
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.print("Enter your name: ");
            String name = reader.readLine();  // 한 줄씩 입력
            System.out.println("Hello, " + name + "!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

<Scanner 예시>
// 임포트 필요

import java.util.Scanner;


public class ScannerExample {
    public static void main(String[] args) {
        // 입력 받기 위한 변수 선언

        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = scanner.nextLine(); 
        System.out.println("Hello, " + name + "!");
    }
}

 

비교

 

특징 BufferedReader Scanner
입력속도 더 빠름 비교적 느림
사용 용이성 복잡 (예외처리, 입력타입 문자열 뿐) 간편 (다양한 메서드 제공)
데이터 타입 String 다양 (int, double,String 등)
정규 표현식 지원 X 지원
멀티스레드 환경 멀티스레드에서 안전 멀티스레드에서 위험

 

 

 

 

 

 

 

속도차이가 나는 이유는 Buffer 사용 여부 차이, 정규표현식 적용 과정 여부 등 때문

 

여기서 Buffer란 데이터를 일시적으로 저장하는 메모리 공간을 말함.

 

BufferedReader는 8KB 크기의 버퍼에 저장되었다가 한 번에 전송하는 방식이고

 

Scanner는 입력에 바로바로 전송되는 방식

 

바로바로 전송되는 것보다 여러개 묶어서 보내는 것이 더 효율적이라는 원리.

 

 

 

 

 

결론

 

BufferedReader는 데이터 입력이 많거나 멀티스레드 환경, 빠르고 효율적인 처리가 필요할 때 사용

Scanner 다양한 데이터 타입을 입력할 수 있어 간편하므로 간단한 입력 처리인 경우에 용이

 

웬만하면 BufferedReader 사용하는 것으로 하자..