CodeGym /행동 /JAVA 25 SELF /키보드 입력

키보드 입력

JAVA 25 SELF
레벨 2 , 레슨 5
사용 가능

1. 콘솔에서 읽기, System.in

이전 강의에서 화면에 출력하는 방법을 배웠습니다. 이를 위해 System.out 객체와 그 메서드 print(), println()을 사용했죠. 간단하고 편리합니다.

하지만 짐작하듯이, 출력만으로는 충분하지 않습니다. 대부분의 프로그램의 목표는 사용자에게 유용한 일을 하는 것입니다. 그래서 사용자가 키보드로 데이터를 입력할 수 있어야 할 때가 매우 많습니다.

출력과 마찬가지로 입력에도 전용 객체 — System.in — 이 있습니다. 하지만 기대만큼 편리하지는 않습니다. 이 객체는 키보드에서 데이터를 읽을 수 있지만, 한 번에 한 문자씩만 읽습니다.

따라서 우리는 System.in과 함께 사용하면 필요한 기능을 모두 제공하는 또 다른 클래스를 활용하겠습니다. Java에는 거의 모든 경우를 위한 클래스가 오래전부터 준비되어 있습니다. 지금 그중 하나를 알아보겠습니다.

2. 클래스 Scanner

Scanner 클래스(완전한 이름은 java.util.Scanner)는 콘솔, 파일, 인터넷 등 다양한 소스에서 데이터를 읽을 수 있습니다. 키보드에서 데이터를 읽게 하려면 데이터 소스로 System.in 객체를 매개변수로 전달해야 합니다. 그러면 Scanner 타입의 객체가 알아서 처리합니다.

Scanner 객체로 키보드에서 입력을 읽는 코드는 대략 다음과 같습니다:

코드 설명
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Scanner 객체를 생성합니다. 키보드에서 문자열을 읽습니다. 키보드에서 숫자를 읽습니다.

보기에는 간단해 보이지만, 정말 그렇게 쉬울까요?

아마 궁금한 점이 많을 텐데, 지금부터 차례로 답해 보겠습니다.

그전에 Scanner 클래스를 사용하는 전체 프로그램 예제를 먼저 보겠습니다:

void main()
{
    Scanner console = new Scanner(System.in);
    String name = console.nextLine();
    int age = console.nextInt();

    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
}

3. 객체 Scanner 생성

첫 번째 질문 — Scanner console = new Scanner(System.in); 이 줄은 무엇일까요?

이런 형태의 코드는 헷갈릴 수 있지만, 앞으로 계속 보게 됩니다. 이제 이 코드가 무엇을 의미하는지 설명할 때입니다.

텍스트를 담는 변수를 보통 어떻게 만드는지 떠올려 봅시다:


String str = "텍스트";
문자열 변수 선언과 초기화

먼저 변수의 타입(String)을 쓰고, 그다음 이름(str)을 쓰며, 마지막으로 등호 뒤에 값을 작성합니다.

문제로 보였던 그 줄도 사실 똑같습니다:


Scanner console = new Scanner(System.in);
Scanner 타입 변수의 선언과 초기화

등호의 왼쪽은 Scanner 타입의 변수 console을 선언한 것입니다. 이름은 예를 들어 s, scanner, 또는 keyboard로 해도 됩니다. 그러면 코드는 다음과 같습니다:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

이제 훨씬 명확해졌을 것입니다.

반면 등호 오른쪽의 코드는 조금 더 복잡해 보입니다. 즉, new Scanner(System.in); 를 말합니다. 그래도 그리 어려운 것은 아닙니다.

이 코드는 JVM에 이렇게 지시합니다: new 키워드로 Scanner 타입의 새 객체를 만들고, 새로 만든 Scanner 객체가 데이터를 읽어 올 소스로 System.in 객체를 매개변수로 전달하라.

이 줄이 실행되고 나면 Scanner 타입의 변수 console이 생기며, 프로그램은 이를 통해 키보드 입력을 읽을 수 있게 됩니다.

4. 메서드 호출

위 예제에서 Scanner 타입의 변수 consoleScanner 객체에 대한 참조를 담고 있습니다.

변수가 가리키는 객체의 메서드를 호출하려면, 변수 이름 뒤에 점을 찍고 메서드 이름과 매개변수를 씁니다. 일반적인 형태는 다음과 같습니다:


variable.method(parameters);
변수가 참조하는 객체의 메서드 호출

예시:

System.out.println("안녕");
System.out.println(1);

함수에 매개변수를 전달하지 않을 경우, 빈 괄호만 쓰면 됩니다:


variable.method();
매개변수 없이 메서드 호출

예시:

System.out.println();

5. 콘솔에서 데이터 입력

Scanner 타입의 객체가 있으면 키보드로부터 데이터를 입력받는 일은 매우 쉽습니다.

키보드에서 문자열을 읽으려면 다음 명령이 필요합니다:


String str = console.nextLine();

프로그램이 이 줄에 도달하면 일시 정지하고, 사용자가 데이터를 입력한 뒤 Enter 키를 누를 때까지 기다립니다. 그러고 나면 입력한 내용이 변수 str에 저장됩니다.

키보드에서 정수를 읽으려면 다음 명령이 필요합니다:


int number = console.nextInt();

동작은 앞의 명령과 동일합니다. 프로그램이 이 줄에 도달하면 일시 정지하고, 사용자가 Enter 키를 누를 때까지 기다립니다. 이후 입력한 내용이 숫자로 변환되어 변수 number에 저장됩니다.

사용자가 정수로 변환할 수 없는 값을 입력하면, 프로그램은 오류를 발생시키고 종료됩니다.

키보드에서 실수(소수)를 읽으려면 다음 명령이 필요합니다:

double number = console.nextDouble();

이 명령은 nextInt()와 완전히 동일하게 동작하지만, 입력값이 double로 변환 가능한지 확인합니다.

키보드에서 두 수를 읽어 합을 출력하는 프로그램 예시:

void main()
{
    Scanner console = new Scanner(System.in);
    int a = console.nextInt();
    int b = console.nextInt();

    System.out.println(a + b);
}

참고

사용자는 한 줄에 여러 숫자를 공백으로 구분해 입력할 수 있으며, 이런 경우도 Scanner 클래스의 메서드들이 올바르게 처리합니다. 다만, 프로그램은 사용자가 Enter 키를 누른 이후에야 값을 읽습니다.

1
과제
JAVA 25 SELF, 레벨 2, 레슨 5
잠금
비밀번호 입력 🔒
비밀번호 입력 🔒
1
과제
JAVA 25 SELF, 레벨 2, 레슨 5
잠금
새 플레이어 등록 🎮
새 플레이어 등록 🎮
1
과제
JAVA 25 SELF, 레벨 2, 레슨 5
잠금
구매 총액 계산 🛒
구매 총액 계산 🛒
1
과제
JAVA 25 SELF, 레벨 2, 레슨 5
잠금
디지털 명함 만들기 📇
디지털 명함 만들기 📇
1
설문조사/퀴즈
int와 String 타입 소개, 레벨 2, 레슨 5
사용 불가능
int와 String 타입 소개
int와 String 타입 소개
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION