안 씀/java-개념

키 입력

unhyepnhj 2024. 4. 30. 14:47

System.in

- 표준 입력 스트림 객체

- 키보드를 직접 제어하고 키 입력 받음

- 키 값을 바이트(문자 아님)정보로 리턴 -> 응용 프로그램이 문자나 숫자로 변환해야 함 

- Scanner 클래스(키보드에서 입력된 키를 사용자가 원하는 타입으로 변환) 사용 


Scanner를 이용한 키 입력

- 응용 프로그램이 키 입력을 쉽게 받을 수 있도록 자바 패키지에서 제공하는 클래스 

 

1. Scanner 객체 생성

Scanner scanner = new Scanner(System.in);

- scanner 객체는 System.in 객체를 이용하여 키보드로부터 바이트 정보들을 입력받음 

 

2. import문 사용

import java.util.Scanner;

- Scanner 클래스는 자바에서 제공되는 java.util 패키지에 있음

- import문을 통해 Scanner의 경로명이 java.util.Scanner임을 표시(import문이 없으면 컴파일러가 Scanner 클래스의 코드가 어디에 있는지 찾을 수 없음)

 

3. Scanner 클래스로 키 입력

- Scanner 클래스는 사용자가 입력하는 키 값을 공백 문자를 기준으로 분리하여 토큰 단위로 읽음

             *공백 문자: '  ', '\t', '\f', '\r', '\n'

- 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음 

- 키 입력 시 다음 메소드를 사용

//사용자의 키 입력이 Kim Seoul 20 65.1 true 일 때

Scanner scanner = new Scanner(System.in);	//객체 생성 

String name = scanner.next();			//문자열로 리턴: "Kim"
String city = scanner.next();			//문자열로 리턴: "Seoul"
int age = scanner.nextInt();			//int 타입으로 리턴: 20
double weight = scanner.nextDouble();		//double 타입으로 리턴: 65.1
boolean isSingle = scanner.nextBoolean();	//boolean 타입으로 리턴: true

 

※nextLine()과 next()

- next()로는 공백이 포함된 문자열을 읽을 수 없음 

- "Seoul Korea"와 같이 공백이 포함된 문자열 입력을 위해 nextLine() 이용 

- nextLine()은 Enter 키의 입력을 기다리는 용도로 사용 가능 

 

※프로그램 전체에 Scanner 객체를 하나만 생성하고 공유하는 것이 바람직함

- Scanner 객체를 여러 개 생성해도 이들 모두가 동일한 System.in을 공유

- 한 곳에서 Scanner.close()를 호출하여 Scanner 객체를 닫아버리면 System.in도 닫힘

 

4. Scanner 객체 닫기

scanner.close();

- Scanner 객체가 닫히면 System.in도 함께 닫히므로 더 이상 System.in을 사용하여 입력을 받을 수 없음 

- scanner를 닫는 코드가 없으면 컴파일 시 경고가 표시되지만 실행 시 문제는 없음(프로그램 종료 시 자동으로 닫힘)


예제 2-4 Scanner 클래스로 이름, 도시, 나이, 체중, 독신 여부를 입력받고 다시 출력하는 프로그램 작성