[Java] Scanner 클래스

Bam·2024년 2월 25일
0

Java

목록 보기
21/98
post-thumbnail

지금까지 문법을 진행해오면서 우리는 코드에 데이터를 심어서 그 결과대로 출력을 했는데요. 이번엔 터미널 상에서 데이터를 직접 받는 방법에 대해 알아보겠습니다.


Scanner 클래스

콘솔 상에서 데이터를 입력받기 위해서는 Scanner 클래스를 사용합니다. Scanner 클래스java.util이라는 패키지에 포함되어 있기 때문에 import구문을 사용해서 패키지를 import하고 사용하여야 합니다.

스캐너는 다음과 같이 선언합니다.

import java.util.Scanner;

Scanner 이름 = new Scanner(System.in);

System.in

우리가 콘솔에 무언가를 출력할 때 Sysyem.out.println()을 사용해왔었는데요. 이는 System 클래스의 out 필드를 이용해서 출력 스트림을 사용한 것 이었습니다.

입력은 System 클래스의 in 필드를 이용해서 입력 스트림을 사용하게 됩니다.


Scanner로 입력받기

Scanner로 데이터를 입력받기 위해서는 입력받고자하는 데이터 타입에 따라 다른 메소드를 사용해야합니다.

타입메소드
booleannextBoolean()
bytenextByte()
shortnextShort()
intnextInt()
longnextLong()
floatnextFloat()
doublenextDouble()
StringnextLine()

각 입력은 Enter(개행), Space(공백)으로 구분합니다.

String은 문자열, 즉 문장입니다. char형은 String 형태로 읽게 만들어줍니다.

다음 코드는 boolean, int, double형을 차례대로 입력받고 출력하는 코드입니다.

import java.util.Scanner;

public class Scan {
    public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		boolean bool = scanner.nextBoolean();
		int intNumber = scanner.nextInt();
		double doubleNumber = scanner.nextDouble();

		System.out.println("boolean형: " + bool);
		System.out.println("int형: " + intNumber);
		System.out.println("double형: " + doubleNumber);
	}
}

만약 nextXxxxx()의 타입과 일치하지 않는 데이터 타입을 넣는 경우 오류가 발생합니다.

Scanner 버퍼 비우기

위의 예제에서는 기본형 값들만을 입력받지 않아서 문제가 발생하지 않았지만 입력 도중 기본형이 아닌 String(문자열)입력을 받는 경우 다음과 같은 문제가 발생합니다.

Scanner scanner = new Scanner(System.in);

boolean bool = scanner.nextBoolean();
String str = scanner.nextLine();

System.out.println("boolean형: " + bool);
System.out.println("String형: " + str);

입력을 하지 못했는데 입력이 된 것으로 처리되어 넘어갑니다.

이는 기본형 입력 다음으로 nextLine()을 사용하는 경우 입력을 받는 것이 아니라 버퍼에 있는 데이터를 받아오기 때문에 구분하기 위해 입력했던 Enter(개행) 또는 Space(공백) 문자가 입력되어서 자동적으로 넘어가게 되는 것 입니다.

따라서 이러한 문제를 해결하기 위해서는 nextLine()을 수행하기 이전에 버퍼를 한 번 비워주어야 합니다.

Scanner scanner = new Scanner(System.in);

boolean bool = scanner.nextBoolean();
scanner.nextLine();	//버퍼 비우기
String str = scanner.nextLine();

System.out.println("boolean형: " + bool);
System.out.println("String형: " + str);

0개의 댓글