Java

[Java] 자바에서 키 입력 System.in과 Scanner

yujinius 2024. 5. 3. 20:11

자바에서 키 입력

System.in

  • 키보드 장치를 직접 제어하고 키 입력을 받는 표준 입력 스트림 객체
  • System.in은 입력된 키를 단순한 바이트 정보로 제공해서 바이트 정보를 문자나 숫자로 변환해야 하는 과정 필요

Scanner

  • 키보드에서 입력된 키를 문자나 정수, 실수, 문자열 등 사용자가 원하는 타입으로 변환해주는 Scanner 클래스를 사용하는 것이 효과적

import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
  • Scanner 클래스는 사용자가 입력하는 키 값을 공백 문자(’ ‘, ‘\t’, ‘\n’)를 기준으로 분리하여 토큰 단위로 읽음
// 1. next() 메소드는 공백을 기준으로 다음 입력 토큰을 반환
String token = scanner.next();

// 2. nextInt(), nextDouble(), nextBoolean() 각각 정수, 실수, 부울 값을 입력으로부터 읽어옴
int number = scanner.nextInt();
double decimal = scanner.nextDouble();
boolean flag = scanner.nextBoolean();

// 3. nextLine() 메소드는 개행 문자를 기준으로 다음 줄에 있는 문자열을 반환
String line = scanner.nextLine();

//4. hasNext(), hasNextInt(), hasNextDouble(), hasNextBoolean() 각각 다음 토큰이 있는지 여부를 확인
// ctrl + z 키 입력되면 입력 끝이므로 false 리턴
if (scanner.hasNextInt()) {
    int number = scanner.nextInt();
}

// 5. useDelimiter() 메소드는 입력에서 토큰을 구분하는 데 사용할 구분자 패턴을 설정
scanner.useDelimiter(",");

// 6. close() 메소드는 Scanner 객체가 사용한 시스템 리소스를 해제
scanner.close();

nextLine()과 next()

  • nextLine()
    • 공백이 낀 문자열 읽는데 사용
    • 키를 기다리는 용도로 사용 가능
    • 다른 입력 없이 키만 입력하면 빈 문자열(””)리턴
  • next()
    • 공백이 낀 문자열 읽을 수 없음
    • 키를 계속 입력해도 다른 키가 입력될 때까지 기다림
    • 빈 문자열(””)을 리턴하지 않음

주의!

  • Scanner 객체는 하나만 생성하고 공유하는 것이 바람직함
  • Scanner 객체를 여러 개 생성해도 이들은 모두 하나뿐인 System.in을 공유하므로 한 군데에서 Scanner.close()를 호출해서 Scanner 객체를 닫아버리면 System.in도 닫아버려 응용프로그램 내 다른 Scanner 객체에서 키 입력을 받을 수 없게 된다.