Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 콘솔 입력을 읽는 방법: Scanner와 BufferedReader 활용 가이드

Java 프로그래밍에서 사용자의 입력을 받아야 하는 경우는 매우 흔합니다. 이번 글에서는 Java 콘솔(표준 입력)에서 데이터를 읽어오는 대표적인 두 가지 방법, Scanner 클래스와 BufferedReader 클래스를 예제와 함께 자세히 살펴보겠습니다.

1. Scanner 클래스를 사용한 콘솔 입력

Scanner는 다양한 타입(문자열, 정수, 실수 등)의 입력을 손쉽게 읽을 수 있도록 지원하는 가장 널리 사용되는 클래스입니다.

예제 코드

import java.util.Scanner;
public class Demo{
    public static void main(String args[]){
        Scanner my_scan = new Scanner(System.in);
        String my_str = my_scan.nextLine();
        System.out.println("입력된 문자열은 " + my_str);
        int my_val = my_scan.nextInt();
        System.out.println("입력된 정수는 " + my_val);
        float my_float = my_scan.nextFloat();
        System.out.println("입력된 실수 값은 " + my_float);
    }
}

실행 결과

입력된 문자열은 Joe
입력된 정수는 56
입력된 실수 값은 78.99

코드 설명

위 예제에서 Demo라는 클래스가 main 함수를 포함하고 있습니다. 먼저 Scanner 클래스의 인스턴스를 생성하며, 생성자에 System.in을 전달해 표준 입력 스트림과 연결합니다.

이후 각 메서드의 역할은 다음과 같습니다.

  • nextLine(): 문자열 입력을 한 줄 단위로 읽어옵니다.
  • nextInt(): 표준 입력 콘솔에서 정수형 값을 읽어옵니다.
  • nextFloat(): 표준 입력 콘솔에서 실수(float) 타입의 값을 읽어옵니다.

읽어들인 값들은 System.out.println()을 통해 콘솔에 출력됩니다. Scanner는 이처럼 타입별 전용 메서드를 제공하기 때문에 초보자도 직관적으로 사용할 수 있다는 장점이 있습니다.

2. BufferedReader를 사용한 콘솔 입력

BufferedReader는 문자 기반 스트림을 버퍼링하여 효율적으로 읽어오는 클래스입니다. 대량의 데이터를 처리할 때 Scanner보다 성능이 뛰어난 것으로 알려져 있습니다.

예제 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Demo{
    public static void main(String[] args) throws IOException{
        BufferedReader my_reader = new BufferedReader(new InputStreamReader(System.in));
        String my_name = my_reader.readLine();
        System.out.println("입력된 이름은 ");
        System.out.println(my_name);
    }
}

실행 결과

입력된 이름은
Joe

코드 설명

이 예제 역시 Demo 클래스의 main 함수에서 동작합니다. InputStreamReader로 바이트 스트림을 문자 스트림으로 변환한 뒤, 이를 BufferedReader로 감싸 버퍼링 기능을 추가합니다.

readLine() 메서드를 호출하면 표준 입력으로 들어온 문자열 데이터를 한 줄씩 읽어올 수 있습니다. 주의할 점은 readLine()IOException을 던질 수 있으므로, 위 예제처럼 main 메서드에 throws IOException을 선언하거나 try-catch 블록으로 예외를 처리해야 한다는 것입니다.

Scanner vs BufferedReader, 무엇을 선택해야 할까?

구분ScannerBufferedReader
사용 편의성간편함 (타입별 메서드 제공)문자열만 반환 (파싱 필요)
성능상대적으로 느림빠름 (버퍼링 지원)
예외 처리필요 없음IOException 처리 필수
적합한 경우간단한 입력, 학습용대용량 데이터, 성능 중시

정리하면, 간단한 프로그램이나 학습 목적이라면 Scanner가 편리하고, 입출력 성능이 중요한 대규모 애플리케이션에서는 BufferedReader가 더 적합합니다. 두 방식의 특징을 잘 이해하고 상황에 맞게 활용하시기 바랍니다.