자바에서 키 입력
System.in
System.in은 키보드 장치를 직접 제어하고 키 입력을 받는 표준 입력 스트림 객체입니다.
자바 응용 프로그램은 System.in을 통해 사용자로부터 키를 입력받을 수 있다.

하지만, System.in은 입력된 키를 단순한 바이트 정보로 응용프로그램에게 제공하므로, 응용프로그램은 받은 바이트 정보를 문자나 숫자로 변환해야 하는 번거로움이 있습니다. 그러므로 키보드에서 입력된 키를 문자나 정수, 실수, 문자열 등 사용자가 원하는 타입으로 변환해주는 Scanner 클래스를 사용하는 것이 효과적입니다.
Scanner를 이용한 키 입력
Scaner는 응용 프로그램이 키 입력을 쉽게 받을 수 있도록 자바 패키지에서 제공하는 클래스입니다.
Scanner 객체 생성
Scanner scanner = new Scanner(System.in);

import 문 사용
Scanner를 사용하기 위해서는 프로그램의 맨 앞줄에 import 문이 필요합니다.
import java.util.Scanner;
Scanner 클래스는 자바에서 제공되는 java.util 패키지에 있으므로, 이 import문을 통해 Scanner의 경로명이 java.util.Scanner의 경로명이 java.util.Scanner 임을 나타냅니다.
이 import 문이 없으면 자바 컴파일러 Scanner 클래스의 코드가 어디에 있는지 찾을 수 없습니다.
Scanner 클래스로 키 입력받기
사용자가 입력하는 키 값을 공백 문자(' ', '\t', '\n')를 기준으로 분리하여 토큰 단위로 읽습니다.

Scanner 클래스를 이용하여 키 입력을 받을 때 아래 표의 메소드를 사용합니다.
| 메소드 | 설명 |
| String next() | 다음 토큰을 문자열로 리턴 |
| byte nextByte() | 다음 토큰을 byte 타입으로 리턴 |
| short nextShort() | 다음 토큰을 short 타입으로 리턴 |
| int nextInt() | 다음 토큰을 int 타입으로 리턴 |
| long nextLong() | 다음 토큰을 long 타입으로 리턴 |
| float nextFloat() | 다음 토큰을 float 타입으로 리턴 |
| double nextDouble() | 다음 토큰을 double 타입으로 리턴 |
| boolean nextBoolean() | 다음 토큰을 boolean 타입으로 리턴 |
| String nextLine() | '\n'을 포함하는 한 라인을 일고 '\n'을 버린 나머지 문자열 리턴 |
| void close() | Scanner 사용 종료 |
| boolean hasNext() | 현재 입력된 토큰이 있으면 true, 아니면 입력 때까지 무한정 대기, 새로운 입력이 들어올 때 true 리턴, crtl-z 키가 입력되면 입력 끝이므로 false 리턴 |
nextLine()과 next()
공백이 낀 문자열을 입력받기 위해서는 Scanner 클래스의 nextLine()을 이용하면 됩니다.
next()로는 공백이 낀 문자열을 읽을 수 없습니다.
또한, nextLine()은 <Enter>키의 입력을 기다리는 용도로 사용할 수 있습니다.
다른 입력 없이 <Enter>키 만 입력될 때, nextLine()은 빈 문자열("")을 리턴하면서 바로 돌아오지만, next()를 사용하게 되면, <Enter>키를 계속 입력하여도 문자열이나 숫자 등 다른 키가 입력될 때까지 기다립니다.
next()는 결코 빈 문자열("")을 리턴하지 않습니.
Scanner 객체 닫기
scanner 객체의 사용을 종료하려면 다음과 같이 닫아 줍니다.
scanner.close();
scanner 객체가 닫히면 System.in도 함께 닫히므로 더 이상 System.in을 사용하여 키 입력을 받을 수 없습니다.
scanner.close();
scanner = new Scanner(System.in); // scanner를 닫은 후 다시 scanner로 키 입력 받을 수 없음
응용 프로그램에 scanner을 닫는 코드가 없으면 컴파일 시에 경고가 발생하지만, 실행하는 데 특별히 문제가 없습니다. 프로그램이 종료되면 자동으로 닫힙니다.
Scanner를 이용한 키 입력 연습
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요");
Scanner scanner = new Scanner(System.in);
String name = scanner.next(); // 문자열 읽기
System.out.print("이름은 " + name + ", ");
String city = scanner.next(); // 문자열 읽기
System.out.print("도시는 " + city + ", ");
int age = scanner.nextInt(); // 정수 읽기
System.out.print("나이는 " + age + ", ");
double weight = scanner.nextDouble(); // 실수 읽기
System.out.print("체중은 " + weight + "kg, ");
boolean isSingle = scanner.nextBoolean(); // 논리값 읽기
System.out.print("독신 여부는 " + isSingle + "입니다.");
scanner.close(); // scanner 객체 닫기
}
}
실행 결과
이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요
Chang 부천 24 56 true
이름은 Chang, 도시는 부천, 나이는 24, 체중은 56.0kg, 독신 여부는 true입니다.