자바에서의 키 입력
자바에서 키보드를 이용하여 사용자로부터 입력을 받는 방법에는 일반적으로 표준 입력 스트림인 System.in을 이용하는 방법과 JDK에서 제공하는 Scanner class를 이용하는 방법이 있다. System.in을 이용하는 것보다 Scanner 클래스를 이용하는 방법이 보다 쉽다.
1. System.in
System.in은 키보드 장치와 연결된 원시적인 저수준(low-level) 입력 스트림 즉, 객체이다. 자바에서 키 입력 방법의 최하층부에는 키보드와 연결된 System.in이 있다. 자바 응용 프로그램에서 System.in만을 이용해서 직접 키 입력을 받을 수 있지만, System.in은 입력되는 키 값을 바이트 정보로 반환하기 때문에 바이트 정보를 문자 정보로 변환해야 어떤 문자가 입력되었는지 판단할 수 있다. 키 입력을 받기 위한 대부분의 고수준 방법은 System.in을 활용하여 키 입력을 받게 하고 이를 변환하여 사용자가 원하는 문자 정보로 리턴한다.
다음과 같이 System.in과 Reader를 이용하여 키 입력을 받고 이를 문자 정보로 변환하여 리턴하는 InputStreamReader를 활용하는 것이 일반적인 System.in을 활용한 입력 받기 방식이다.
InputStreamReader rd = new InputStreamReader(System.in); // 키보드 입력 스트림 생성
int c = rd.read(); // 키보드로부터 문자 하나 읽기. 읽은 문자 값은 c에 저장.
자바의 표준 입력은 스트림 방식이기 때문에 키 입력 버퍼를 가지고 있다. 입력된 키는 스트림 버퍼에 일차적으로 저장되며, <Enter> 키가 입력되어 키 입력이 완료될 때 비로소 프로그램에게 키가 전달된다.
2. Scanner class를 이용한 키 입력
Scanner 클래스를 이용하면 더 쉽게 키 입력을 받을 수 있다.
- import 사용 : import java.util.Scanner; // 자바에서는 다른 클래스를 사용하기 위해서는 import문을 이용해서 관련 데이터를 불러와야 한다.
- Scanner 객체 생성 : Scanner sc = new Scanner(System.in);
- Scanner class 의 method들 사용 : String name = sc.nextLine(); int age = sc.nextInt();
Scanner 클래스에는 다용한 입력 메소드들이 있다. 그 중 일부를 소개하도록 하겠다.
1) String next()
다음 아이템을 문자열 타입으로 리턴한다.
2) byte nextByte()
다음 아이템을 byte 타입으로 리턴한다.
3) short nextShort()
다음 아이템을 short 타입으로 리턴한다.
4) int nextInt()
다음 아이템을 int 타입으로 리턴한다.
5) long nextLong()
다음 아이템을 long 타입으로 리턴한다.
6) float nextFloat()
다음 아이템을 float 타입으로 리턴한다.
7) double nextDouble()
다음 아이템을 double 타입으로 리턴한다.
8) String nextLine()
한 라인 전체('\n' 까지)를 읽어 문자열 타입('\n' 미포함)으로 리턴한다.