CHAPTER 16. Scanner 알아가기
오늘은 java.util 패키지에 포함되어 있는 Scanner 클래스의 사용법에 대해 알아보도록 하겠습니다.
자바를 처음 배울 때 아마 대부분은 키보드로 입력받기 위해 Scanner라는 클래스를 썼을 거예요! 자바 외에도 다양한 언어들은 각각의 입력 방식이 있고, 각 언어별로 대표하는 대중적인 입력방식이 하나씩 있습니다. 자바에서도 여러 가지 입력 방법이 있는데, 그중에 가장 쉬우면서도 대중적인 입력 중 대표적인 것이 바로 Scanner 클래스를 이용한 입력입니다.
1 ) Scanner 클래스 특징
- Scanner 클래스란 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스입니다. 카톡에서 메시지를 입력 후 전송 버튼을 누르면 상대방에게 메세지가 전송되듯 메세지 대신 값을 입력받는 기능입니다.
- java.util 패키지 내에 존재하는 클래스입니다. 정수(int), 실수(double),문자열(String)등의 기본적인 데이터 타입 입력을 받기 위한 클래스 입니다.
(입력을 받고 싶으면 next(), nextLine(),nextint()등 Scanner의 주요 메서드를 사용하는데 자세한 부분은 아래에서 확인해보자!
-Scanner의 입력 메서드들은 대부분 공백과 개행('', '\t' , '\r', '\n' 등..)을 기준으로 읽어서 사용자의 편의에 따라 쉽게 입력을 받을 수 있습니다.
2 ) Scanner 주요 메서드
메서드 | 설 명 |
String next() | 다음 토큰(Token)을 문자열로 리턴 해줍니다. |
byte nextByte() | 다음 토큰(Token)을 byte 타입으로 리턴 해줍니다. |
short nextShort() | 다음 토큰(Token)을 short 타입으로 리턴 해줍니다. |
int nextInt() | 다음 토큰(Token)을 int 타입으로 리턴 해줍니다. |
long nextLong() | 다음 토큰(Token)을 long 타입으로 리턴 해줍니다. |
float nextFloat() | 다음 토큰(Token)을 float 타입으로 리턴 해줍니다. |
double nextDouble() | 다음 토큰(Token)을 double 타입으로 리턴 해줍니다. |
String NextLinte() | '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지만 리턴 해줍니다. |
void close() | Scanner 사용 종료 |
※ 토큰(Token) : 공백 문자(Spacebar), 탭(Tab), 개행(Enter)등으로 구분되는 요소입니다.
3 ) Scanner 클래스 기본 사용법
import java.util.Scanner; // import문 필요합니다.
Scanner sc = new Scanner(System.in); // Scanner 객체
Scanner 클래스도 객체를 생성해야만 기능을 사용할 수 있는 것이 있고 생성하지 않아도 되는 클래스가 있습니다.
println() 메서드와 같은 것은 객체를 생성하지 않고 사용 가능하지만 Scanner클래스는 꼭 객체를 생성해야만 사용할 수 있습니다.
System.in 이란??
- System.in은 화면에서 입력을 받겠다는 의미입니다. Scanner클래스는 화면뿐만 아니라 파일로부터 입력을 받을 수 있는데 화면으로부터 정수형, 소수형과 같은 데이터 타입을 입력받을 것이기 때문에 System.in을 사용합니다.
- Ssytem.in은 입력한 값을 Byte 단위로 읽으며 키보드와 연결된 자바의 표준 입력 스트림입니다.
예제 1 ) Scanner 사용 예제
위 예제에 나오는 nextInt()와 같이 타입을 지정해서 받는 메서드는 'Enter'값을 무시하고 해당 타입만 받아 변환하여 반환합니다.
그리고 Scanner의 사용이 끝났다면 굳이 close()로 닫아줄 필요는 없지만 닫아주는 습관을 기르도록 합시다!
예제 2 ) Scanner 무한 루프
실무에서는 Scanner를 무한루프로 돌려야 하는 상황이 있습니다. 예를 들면 식당에 있는 키오스크를 보면 중식집만 가도 메뉴가 다양하게 있습니다. 면요리, 볶음요리 등등 메뉴가 많을 때 무한루프를 돌리는 경우가 있는데 조건식 while문을 사용해 보자!
간단한 예시로 입력받은 데이터 값을 무한 루프 돌려서 값을 누적시켜 보았는데 아래 예시를 참고해 봅시다.
예제 3 ) Scanner 무한 루프 배열 활용하기
위 예제와 동일하게 무한 루프로 값을 출력하지만 이전에 배웠던 배열까지 활용해서 원하는 메뉴를 출력해 봅시다.
import java.util.Scanner;
public class My_First_Menu {
public static void main(String[] args) {
String[] menuArr = new String[3];
menuArr[0] = "(1) 한식";
menuArr[1] = "(2) 양식";
menuArr[2] = "(3) 중식";
String[] kFoodArr = new String[4];
kFoodArr[0] = "(1) 김치찌개";
kFoodArr[1] = "(2) 된장찌개";
kFoodArr[2] = "(3) 삼겹살";
kFoodArr[3] = "(4) 비빔밥";
String[] eFoodArr = new String[3];
eFoodArr[0] = "(1) 돈까스";
eFoodArr[1] = "(2) 비프스테이크";
eFoodArr[2] = "(3) 카레라이스";
String[] cFoodArr = new String[3];
cFoodArr[0] = "(1) 짜장면";
cFoodArr[1] = "(2) 짬뽕";
cFoodArr[2] = "(3) 탕수육";
먼저 배열에 각각의 메뉴를 담아주고 Scanner 클래스를 구현해봅시다.
Scanner sc = new Scanner(System.in);
System.out.print("== [ 메뉴 ] ==");
int n;
while (true) {
for (String s : menuArr) {
System.out.println(s);
}
System.out.print("원하는 메뉴(1~3)를 선택하세요.(종료:0)>");
n = sc.nextInt();
if (n == 0) break;
if (n == 1) {
System.out.println("[ 한식메뉴 ] ");
for (String k : kFoodArr) {
System.out.println(k);
}
System.out.print("한식메뉴를 선택하세요.(한식메뉴선택종료:0, 전체종료:99)>");
n = sc.nextInt();
if (n == 0) continue;
if (n == 99) break;
System.out.println("고객님은 " + kFoodArr[n - 1] + "를 선택하셨습니다");
} else if (n == 2) {
System.out.println("[ 양식메뉴 ]");
for (String e : eFoodArr) {
System.out.println(e);
}
System.out.print("양식메뉴를 선택하세요.(양식메뉴선택종료:0, 전체종료:99)>");
n = sc.nextInt();
if (n == 0) continue;
if (n == 99) break;
System.out.println("고객님은 " + eFoodArr[n - 1] + "를 선택하셨습니다");
} else {
System.out.println("[ 중식메뉴 ] ");
for (String c : cFoodArr) {
System.out.println(c);
}
System.out.print("중식메뉴를 선택하세요.(중식메뉴선택종료:0, 전체종료:99)>");
n = sc.nextInt();
if (n == 0) continue;
if (n == 99) break;
System.out.println("고객님은 " + cFoodArr[n - 1] + "를 선택하셨습니다");
}
}
while문에 조건을 ture를 주고 무한루프를 돌리는데 주의할 점은 꼭 break; 걸어주는 거 잊지 마세요!
System.out.println();
if (n == 0) {
System.out.println("프로그램을 종료합니다.");
}
if (n ==99){
System.out.println("프로그램을 모두 종료합니다.");
}
}
}
무한루프에서 빠져나오는 값을 넣어주고 해당 값을 출력했을 때 나오는 문구까지 구현해보았습니다.
결과는 아래와 같습니다.
결과를 확인해 보면 무한루프가 제대로 가동하는 걸 볼 수 있는데 코드에 작성한 " 0 , 99" 값을 넣어줘야 프로그램이 종료됩니다.
마치며
Scanner에 대한 기본적인 사용 방법들을 알아보았습니다.
자바를 처음 접한 분들이라면 뒷부분의 내용은 조금 어려울 수 있지만, 자바를 공부할 때 순서가 있듯이 Scanner 클래스를 배우기 전 스트림에 대한 포스팅을 알아보고 이해하시는 걸 권장드립니다!
'[ JAVA ] > JAVA' 카테고리의 다른 글
[ Java ] 예외처리(Exception Handling) (0) | 2023.01.04 |
---|---|
[ Java ] 내부 클래스(Inner Class) (0) | 2023.01.03 |
[ Java ] Collection Framework (0) | 2022.12.28 |
[ Java ] Generic (0) | 2022.12.26 |
[ Java ] JDK 기본 클래스 2 (0) | 2022.12.25 |