이 글에서는 Java에서 사용자로부터 입력을 받는 방법을 단계별로 살펴봅니다. 가장 널리 쓰이는 방식은 java.util.Scanner 클래스를 이용하는 것이며, 상황에 따라 InputStreamReader와 BufferedReader를 조합해 사용할 수도 있습니다.
Scanner 클래스의 주요 메서드
Scanner 클래스는 키보드 입력을 손쉽게 읽어올 수 있는 유틸리티 클래스입니다. 자주 사용되는 메서드는 다음과 같습니다.
- nextInt() – 입력된 다음 토큰을 int(정수) 타입으로 읽어옵니다. 별도의 진법(radix)을 지정하지 않으면 스캐너의 기본 진법을 기준으로 값을 해석합니다.
- nextLine() – 줄바꿈 문자를 만날 때까지 한 줄 전체를 문자열(String)로 읽어옵니다.
처리 순서
사용자 입력을 처리하는 일반적인 흐름은 다음과 같습니다.
Step 1 - 프로그램 시작 Step 2 - 입력값을 저장할 변수 선언 Step 3 - 사용자에게 입력 안내 메시지 출력 Step 4 - 입력값 읽기 Step 5 - 입력값 화면에 출력 Step 6 - 프로그램 종료
예제 1: Scanner로 문자열 입력받기
아래 예제는 Scanner 객체의 nextLine() 메서드를 사용해 사용자가 입력한 문자열을 그대로 읽어와 출력하는 코드입니다.
import java.util.Scanner;
public class PrintString {
public static void main(String[] args) {
String value;
Scanner scanner = new Scanner(System.in);
System.out.println("Scanner 객체가 생성되었습니다.");
System.out.print("문자열을 입력하세요: ");
value = scanner.nextLine();
System.out.println("nextLine() 메서드로 문자열 값을 읽었습니다.");
System.out.println("입력된 문자열은 다음과 같습니다.");
System.out.println(value);
scanner.close();
}
}
프로그램을 실행하고 "Good Morning!"이라고 입력하면 아래와 같은 결과를 확인할 수 있습니다.
실행 결과
Scanner 객체가 생성되었습니다. 문자열을 입력하세요: Good Morning! nextLine() 메서드로 문자열 값을 읽었습니다. 입력된 문자열은 다음과 같습니다. Good Morning!
예제 2: InputStreamReader와 BufferedReader로 정수 입력받기
두 번째 예제는 InputStreamReader로 바이트 스트림을 문자 스트림으로 변환하고, BufferedReader로 한 줄씩 효율적으로 읽어오는 전통적인 방식입니다. readLine() 메서드는 문자열을 반환하기 때문에, Integer.parseInt()를 사용해 정수로 변환해야 합니다.
import java.io.*;
public class ReadNum {
public static void main(String args[]) throws IOException {
InputStreamReader read = new InputStreamReader(System.in);
System.out.println("InputStreamReader 객체가 생성되었습니다.");
BufferedReader in = new BufferedReader(read);
System.out.println("BufferedReader 객체가 생성되었습니다.");
System.out.print("숫자를 입력하세요: ");
int number = Integer.parseInt(in.readLine());
System.out.println("입력된 숫자는 " + number + "입니다.");
}
}
실행 결과
InputStreamReader 객체가 생성되었습니다. BufferedReader 객체가 생성되었습니다. 숫자를 입력하세요: 34 입력된 숫자는 34입니다.
마무리
간단한 입력 처리에는 Scanner가 편리하고, 대량의 데이터를 빠르게 읽어야 하는 경우에는 BufferedReader가 유리합니다. 두 방식 모두 실무에서 자주 사용되므로 위 예제 코드를 직접 실행해 보며 익혀보시기 바랍니다.