자바(Java)에서 Scanner 클래스는 사용자 입력을 읽어들이는 데 사용됩니다. Java Scanner는 java.util 패키지에 기본으로 포함되어 있기 때문에 별도의 외부 라이브러리 없이 바로 사용할 수 있습니다. Scanner는 표준 입력(콘솔)에서 텍스트를 읽어 들인 뒤, 이를 프로그램에 반환하여 저장하거나 자유롭게 조작할 수 있게 해줍니다.
자바에서 사용자 입력을 받는 방법을 이해하는 것은 개발자에게 필수적인 기술입니다. 예를 들어 로그인 폼이 있는 애플리케이션을 개발한다고 생각해 보세요. 사용자의 로그인 정보를 수집하려면 반드시 사용자 입력을 처리해야 합니다.
이번 글에서는 몇 가지 예제와 함께 Scanner 클래스를 활용해 사용자 입력을 받고 처리하는 방법을 자세히 알아보겠습니다.
Scanner 클래스란 무엇인가?
Java Scanner 클래스는 사용자 입력을 수집하는 용도로 사용됩니다. Scanner는 java.util 패키지의 일부이므로, 외부 라이브러리를 따로 내려받지 않고도 간단히 임포트해서 사용할 수 있습니다. Scanner는 표준 입력으로부터 텍스트를 읽어 프로그램에 전달합니다.
Scanner 클래스를 사용하려면 먼저 코드에 임포트해야 하며, 방법은 두 가지입니다.
- java.util.Scanner 클래스만 필요하다면 Scanner 클래스만 직접 임포트하면 됩니다.
- java.util 라이브러리의 다른 모듈도 함께 사용한다면 라이브러리 전체를 임포트하는 것이 좋습니다.
각각의 코드는 다음과 같습니다.
import java.util.Scanner; import java.util.*;
첫 번째 코드는 Scanner 클래스만 임포트하고, 두 번째 코드는 Scanner를 포함한 java.util 라이브러리의 모든 패키지를 임포트합니다.
다른 입력 방식들
참고로 자바에는 Scanner 외에도 사용자 입력을 받을 수 있는 방법이 여럿 있습니다. BufferedReader, InputStreamReader, DataInputStream, Console 클래스 등이 대표적입니다.
하지만 그중에서도 Scanner 클래스가 가장 널리 쓰이는 방식이기 때문에, 이 글에서는 Scanner 클래스를 중심으로 설명하겠습니다.
Java 사용자 입력 문법
Scanner 클래스는 사용자가 콘솔에 입력한 텍스트를 읽어 프로그램에 전달하는 역할을 합니다. 자바에서 사용자 입력을 수집하는 기본적인 방법이라고 할 수 있습니다.
Scanner 클래스를 임포트했다면 이제 바로 사용자 입력 수집을 시작할 수 있습니다. 기본 문법은 다음과 같습니다.
Scanner input = new Scanner(System.in); int number = input.nextInt();
위 코드에서는 input이라는 변수를 만들어 사용자가 콘솔에 입력하는 값을 담당하게 했습니다. 그리고 number라는 변수를 만들어 사용자가 제출한 값을 저장했습니다.
Java 사용자 입력 예제
예를 들어, 지역 컴퓨터 매장의 재고를 관리하는 애플리케이션을 개발한다고 가정해 보겠습니다.
매장 관리자는 재고 목록에 상품을 추가할 수 있는 간단한 프로그램을 요청했습니다. 관리자가 입력해야 하는 값은 두 가지입니다. 상품명과 수량입니다.
이 프로그램을 만들기 위한 코드는 다음과 같습니다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("상품명: ");
String product_name = input.next();
System.out.print("입력된 값: " + product_name);
System.out.print("수량: ");
int quantity = input.nextInt();
System.out.print("입력된 값: " + quantity);
}
}첫 번째 입력값은 상품 이름입니다. 상품명은 문자로 이루어져 있으므로 문자열(String) 타입으로 받습니다. 아래 코드에서 String product_name으로 문자열을 정의했습니다.
두 번째 입력값은 상품 수량입니다. 수량은 숫자이므로 정수형으로 받습니다. int quantity 코드에서 int는 정수(integer)를 의미합니다.
코드를 실행하고 예시 값을 입력하면 프로그램은 다음과 같이 출력됩니다.
상품명: 15-inch MacBook Pro 2019
입력된 값: 15-inch MacBook Pro 2019
수량: 7
입력된 값: 7
프로그램이 사용자의 입력을 정상적으로 수집하고, 입력된 값을 콘솔에 다시 출력해 주는 것을 확인할 수 있습니다. 이렇게 하면 프로그램이 의도대로 작동하는지 검증할 수 있습니다.
Scanner 프로그램의 작동 원리
코드를 단계별로 살펴보겠습니다.
- 사용자 입력을 받기 위해 Scanner 라이브러리를 코드에 임포트합니다.
- 프로그램 코드를 담는 Main 클래스를 선언합니다.
- Scanner input = new Scanner(System.in); 구문으로 Scanner 객체를 초기화합니다. 자바 변수
input이 초기화된 Scanner를 저장합니다. - 콘솔에 '상품명'을 출력하고, input.next();를 통해 사용자에게 상품명을 입력받습니다.
- 사용자가 입력한 상품명을 콘솔에 출력합니다.
- 콘솔에 '수량'을 출력하고, input.nextInt();를 통해 재고 수량을 입력받습니다.
- quantity 변수의 값을 콘솔에 출력합니다.
여기서 눈여겨볼 점은 숫자와 문자열을 받을 때 서로 다른 메서드를 사용했다는 것입니다. 상품명을 받을 때는 input.next();를, 수량을 받을 때는 input.nextInt();를 사용했습니다.
Java Scanner 입력 타입 정리
앞선 예제에서는 문자열과 정수라는 두 가지 데이터 타입을 사용자로부터 수집했습니다. 앞서 언급했듯이, 데이터 타입마다 사용해야 하는 메서드가 다릅니다. 즉, boolean 값을 받을 때와 float 값을 받을 때 사용하는 코드가 서로 다릅니다.
Scanner 클래스로 사용자 입력을 수집할 때 사용할 수 있는 모든 메서드를 아래 표에 정리했습니다.
| 메서드 | 수집하는 값의 타입 |
|---|---|
| nextBoolean() | boolean |
| nextByte() | byte |
| nextDouble() | double |
| nextFloat() | float |
| nextInt() | int |
| nextLine() | String |
| nextLong() | long |
| nextShort() | short |
잘못된 입력 타입을 넣으면 프로그램은 InputMismatchException을 발생시킵니다. 예를 들어 boolean 값을 입력받아야 하는 필드에 double 값을 입력하려고 하면 예외가 발생합니다.
boolean 값 입력받기
다시 컴퓨터 매장 예제로 돌아가 보겠습니다. 이번에는 첫 번째 프로그램을 업데이트해서, 매장 관리자가 해당 상품이 진열대에 있는지 창고에 보관 중인지 입력할 수 있도록 해보겠습니다.
이를 위해 on_display라는 새로운 값을 추가합니다. 이 값은 true 또는 false 두 가지 값만 가질 수 있으므로 boolean 타입으로 저장합니다.
이 데이터를 수집하는 코드는 다음과 같습니다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("상품명: ");
String product_name = input.next();
System.out.print("입력된 값: " + product_name);
System.out.print("수량: ");
int quantity = input.nextInt();
System.out.print("입력된 값: " + quantity);
System.out.print("진열 여부: ");
boolean on_display = input.nextBoolean();
System.out.print("입력된 값: " + on_display);
}
}코드를 실행하고 예시 값을 입력하면 프로그램은 다음과 같이 출력됩니다.
상품명: 15-inch MacBook Pro 2019
입력된 값: 15-inch MacBook Pro 2019
수량: 7
입력된 값: 7
진열 여부: true
입력된 값: true
프로그램의 작동 방식은 앞선 예제와 동일합니다. 다만 이번에는 사용자로부터 하나의 값을 더 수집합니다. 바로 입력한 상품이 진열 중인지 여부입니다. nextBoolean() 메서드로 이 값을 수집한 후, 콘솔에 해당 값을 출력합니다.
마무리
자바의 Scanner 클래스를 활용하면 사용자로부터 다양한 입력을 손쉽게 수집할 수 있습니다. short, String, boolean 등 여러 데이터 타입을 지원하기 때문에 거의 모든 상황에서 유용하게 사용할 수 있습니다.
이번 튜토리얼에서는 몇 가지 예제를 통해 Java Scanner 클래스로 사용자 입력을 수집하는 방법을 살펴보았고, 입력 타입별로 어떤 메서드를 사용해야 하는지도 함께 정리했습니다.
자바 코딩을 더 깊이 학습하고 싶다면 자바 기본 문법과 객체지향 개념을 함께 공부해 보는 것을 추천합니다. 실습 위주의 예제를 직접 따라 해 보면 Scanner 클래스의 활용 능력이 빠르게 향상될 것입니다.