안녕하세요 IT 뽀로로입니다.
오늘은 JAVA 두 번째 시간입니다.
오늘은 키보드 입력에 관한 내용을 다루어보려고 합니다.
바로 본론으로 들어가 보죠!
키보드 입력 방법엔 두 가지 방법이 있습니다.
첫 번째 Standard Input Stream인 System.in을 이용하는 방법,
두 번째 JDK에서 제공하는 Scanner 클래스를 이용하는 방법으로 나뉩니다.
두 가지 방법을 비교해 보았을 때 Scanner를 이용하는 방법이 더 쉽다고 생각이 듭니다.
먼저 첫 번째 Standard Input Stream인 System.in을 살펴봅시다.
원리는 다음과 같습니다.
키보드로 입력된 데이터를 System.in은 Byte로 반환하기 때문에 이 Byte를 문자 정보로 변환시키면,
어떤 문자가 입력되었는지 알 수 있겠죠?
그 Byte 정보를 문자로 바꿔주는 클래스가 바로 InputStreamReader라는 녀석입니다.
예를 들어 위의 그림처럼 생각할 수 있겠죠? 먼저 키보드로부터 입력받은 데이터를 System.in 이 Byte로 읽어 들이죠
그리고 InputStreamReader를 통해서 문자로 데이터를 변환시키는 것입니다.
이것에 대한 소스코드는 다음과 같습니다.
pulbic static void main(String args[]){
InputStreamReader rd = new InputStreamReader(System.in);
while(1){
int a = rd.read(); //한 Byte씩 읽어 들임.
System.out.println((char)a); //캐스팅
if(a == -1) break; // ctrl + z 키 입력시 종료. ctrl + z == -1
}
}
만약 입력값으로 "안녕하세요"라고 입력한다면 어떻게 나올까요?
결과는 당연히 다음과 같이 나옵니다.
//결과 안 녕
하 세 요 |
이제 두 번째 방법인 Scanner클래스를 이용하는 방법을 알아봅시다.
먼저 Scanner 클래스의 원리는 위의 내용과 비슷합니다.
비슷하죠? 그런데 Scanner는 반환할 때 사용자의 입맛에 맞게 데이터를 바꿔서 반환할 수 있습니다.
그리고 Scanner는 공백을 구분하여 읽습니다. 예를 들어 "Bororo 13 man"으로 입력을 했다면
공백을 구분하여 Bororo, 13, man 이렇게 읽습니다.
이런 식으로 구분되니 자료형이야 사용자의 입맛에 맞게 바꾸면 되겠죠? 바로 코드로 넘어가 볼게요
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
//"Bororo 13 5" 입력
String name = scanner.next(); // "Bororo"
int age = scanner.nextInt(); // 13
int count = scanner.nextInt(); // 5
}
이런 식으로 Scanner클래스의 메서드를 이용해 자신의 입맛에 맞게 문자를 쉽게 캐스팅할 수 있습니다.
추가적으로 Sacnner 클래스의 메서드는 다음과 같습니다.
메소드 | 설명 |
String next() | 문자열 타입으로 리턴한다. |
byte nextByte() | byte 타입으로 리턴한다. |
short nextShort() | short 타입으로 리턴한다. |
int nextInt() | int 타입으로 리턴한다. |
long nextLong() | long 타입으로 리턴한다. |
float nextFloat() | float 타입으로 리턴한다. |
double nextDouble() | double 타입으로 리턴한다. |
String nextLine() | 한 라인 전체('\n' 까지)를 읽어 문자열 타입 ('\n' 미포함)으로 리턴한다. |
지금까지 보았을 때 Scanner 클래스를 사용하는 게 더 쉽고 유연하게 사용할 수 있겠죠?
오늘은 키보드 입력에 대하여 알아보았는데 어떠셨는지요?
참고가 되셨으면 좋겠다는 생각을 하면서 이만 물러갑니다 감사합니다.
References. 명품 Java Programming
'IT Study > JAVA' 카테고리의 다른 글
[JAVA] 연습문제 (0) | 2019.08.30 |
---|---|
[JAVA] 5.JAVA의 예외처리 (0) | 2019.08.30 |
[JAVA] 4.main() 메소드의 특징 (0) | 2019.08.27 |
[JAVA] 3.for문과 for-each 문 (0) | 2019.08.27 |
[JAVA] 1.JAVA의 특징 (0) | 2019.08.17 |