Scanner Class
읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스.
특징
1. 기본적인 데이터 타입들을 Scanner의 메소드를 사용하여 입력받을 수 있다.
예를 들어 117을 입력하고자 할 때, String(문자열)로 입력받고 싶으면 next( ) 나 nextLine( )을 사용하고, int(정수)로 입력받고 싶다면 nextInt( )를 사용하여 입력받으면 알아서 해당 타입으로 입력된다.
2. Scanner을 사용할 시에 util 패키지를 경로의 Scanner클래스를 호출해야 한다.
JAVA에서 쓰이는 대부분의 클래스는 lang 패키지가 아니라면 import 를 통해 호출해주어야 한다.
Scanner의 경우는 java.util 패키지에 있다.
3. 공백(띄어쓰기) 또는 개행(줄 바꿈)을 기준으로 읽는다.
Scanner의 입력 메소드들은 대부분 공백과 개행 (' ', '\t', '\r', '\n' 등)을 기준으로 읽는다. 이 덕분에 사용자의 편의에 따라 쉽게 입력을 받을 수 있다.
Scanner 사용법
Step1. import 문
앞서 특징에서 언급했듯 Scanner 클래스를 사용하기 위해서는 호출해주어야 한다.
JAVA의 경우 java.util 패키지 안에 Scanner 클래스가 있으므로 다음과 같이 import 문으로 해당 클래스 경로를 호출하도록 한다.
import java.util.Scanner; // Scanner 클래스 호출
import java.util.*; // java.util 디렉토리 안에 있는 모든 클래스를 import
Step2. Scanner 객체 생성
Step1 에서 Scanner 클래스를 호출했다. 그다음으로 해야 할 것이 바로 객체 생성이다.
기본적으로 객체 생성하는 방법은 아래와 같다.
클래스_이름 객체_이름 = new 클래스_이름();
우리는 Scanner 클래스를 사용할 것이기 때문에 클래스_이름에 Scanner가 들어가야 한다.
객체_이름은 사용자가 편한 대로 지정하면 된다.
(대체로 Scanner의 경우 객체이름은 in, input, sc, scan 이렇게 4가지를 가장 많이 쓰인다.)
Scanner 클래스의 객체를 아래와 같이 생성해주면 된다.
Scanner in = new Scanner(System.in); // Scanner 객체 생성
/* 모두 동일하게 객체 생성
Scanner input = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
*/
여기서 궁금한 점,
Scanner를 생성할 때 System.in이 들어간다는 것이다.
System.in 은 사용자로부터 입력을 받기 위한 입력 스트림이다.
- 키보드와 연결된 자바의 표준 입력 스트림
- 입력되는 키를 바이트로 리턴하는 저수준 스트림
- System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움이 있음
Step3. Method를 이용해서 입력하기
JAVA에서 Scanner의 입력 메소드는 아래와 같은 종류들이 있다.
in.nextBoolean() // boolean 형 입력 및 리턴
in.nextByte() // byte 형 입력 및 리턴
in.nextShort() // short 형 입력 및 리턴
in.nextInt() // int 형 입력 및 리턴
in.nextLong() // long형 입력 및 리턴
in.nextFloat() // float 형 입력 및 리턴
in.nextDouble() // double 형 입력 및 리턴
in.next() // String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽는다.)
in.nextLine() // String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽는다.)
기본적으로 String 입력만 제외하면
모두 next+Type( ) 의 조합으로 사용하면 된다.
좀 더 살펴보자면
next( ) 와 nextLine( )의 차이가 무엇일까?
next( )는 '한 단어', 즉 공백을 기준으로 단어 하나만 읽어 들인다.
nextLine( )은 '한 줄', 즉 한 줄에 입력된 모든 단어를 읽어 들인다.
예를 들어
"오늘은 스캐너 클래스를 공부하는 날" 이라고 입력하면, "오늘은" 만 str에 담겼다.
하나의 단어, 즉 앞서 말했던 공백 또는 줄 바꿈(개행)까지만 읽는다.
(만약 위의 한 문장을 next( )로 모두 읽기 위해서는 5번 사용해야 한다.)
nextLine( )은 다르다.
한 줄 안에 공백 유무와 상관없이 개행(줄바꿈)까지 읽는 것을 볼 수 있다.
Reference
1. 썸머워즈님의 [JAVA] 자바_스캐너(Scanner)
'JAVA' 카테고리의 다른 글
[JAVA] Exception in thread "main" java.lang.ArithmeticException: / by zero (2) | 2022.03.09 |
---|---|
JAVA - 반복문 (for문) (0) | 2022.02.05 |
JAVA - 배열 (Array) (2) | 2022.01.31 |
JAVA - 객체 지향 프로그래밍 (OOP) (16) | 2022.01.12 |
JAVA - 변수(Variable) (0) | 2021.12.15 |