프로그래밍 언어/JAVA

자바에서 키 입력

· 코딩마이데이

System.in

System.in은 키보드 장치를 직접 제어하고 키 입력을 받는 표준 입력 스트림 객체입니다.

자바 응용 프로그램은 System.in을 통해 사용자로부터 키를 입력받을 수 있다.

System.in과 키보드 장치

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

 

Scanner를 이용한 키 입력

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

 

Scanner 객체 생성

Scanner scanner = new Scanner(System.in);

 

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를 이용한 키 입력

 

 

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입니다.

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

조건문  (0) 2025.01.23
연산  (0) 2025.01.22
자바 데이터 타입  (1) 2025.01.20
식별자  (0) 2025.01.20
자바 프로그램의 구조  (0) 2025.01.19