음 무슨 예제를 하려 해도 일단은 입력이 되야 완성도 있는 예제를 쓸 수 있으니까~ Scanner 부터 해보자
가장 처음에 자바가 객체지향 언어라고 하면서 블럭블럭을 모아 전체 프로그램을 만든다고 했었다
입력 역시 입력을 받는 블럭을 생성하여 사용하는데
바로 이 블럭이 System.in 라고 표준 입력 스트림 객체라 하며 키보드 장치를 제어하고 키 입력을 받는다.
하지만 System.in은 입력을 바이트 데이터로 받이들이므로
우리는 사용하기 쉽게 Scanner 클래스를 함께 사용한다.
(* 클래스 : 객체의 기본 틀, 클래스를 이용하여 사용할 객체를 생성한다. 자세한 건 나중 포스팅에...)
자 이제 Scanner클래스를 쓰려면 내가 사용하겠다고 선언해야하는데
이때 사용하는 것이 'import' 이다.
소스코드의 가장 처음에 import java.util.Scanner; 라고 작성해야 Scanner 객체를 생성할 수 있으며
이는 java.util 패키지에 있는 Scanner 클래스를 가져오겠다는 뜻이다.
+ Scanner 클래스 +
Scanner은 사용자의 입력을 ' ', '\t', '\n' 을 기준으로 분리하여 변수에 각자 저장한다.
예를 들어 내가 "안녕 나는 2020년에 살아." 라고 입력하면
"안녕" "나는" "2020년에" "살아." 라고 끊어 입력받는다는 것이다.
그리고 이런 단위를 토큰(token)이라고 한다.
따라서 키입력을 다음 메서드를 이용하여 받는다.
Scanner 클래스의 메서드 몇가지들을 살펴보자.
메서드 | 설명 |
String next() | 다음 토큰을 문자열로 반환 |
String nextLine() | '\n'을 포함하는 한 문장을 읽고 \n을 제외한 나머지 문자열을 반환 |
int nextInt() | 다음 토큰을 int로 반환 |
double nextDouble() | 다음 토큰을 double로 반환 |
boolean nextBoolean() | 다음 토큰을 boolean값으로 반환 |
boolean hasNext() | 현재 입력된 토큰이 있으면 true, 아니면 무한 대기 상태, 그러다 입력이 들어오면 true, ctrl z가 입력되면 false를 반환 |
void close() | 생성한 Scanner객체를 닫는다.(사용종료 한다.) |
따라서 각 메서드들이 반환하는 값에 맞게 토큰을 저장시킬 변수의 자료형을 설정해주어야 한다.
예를 들어 정수 값을 받으려면 int num = scanner.nextInt(); 라고 작성한다.
# hasNext()는 나중에 은근 유용하게 쓰더라 기억해둘 것
# 메서드 안에서 Scanner 객체를 생성시켰으면 메서드 끝나기 전에 꼭 close() 해야 한다. 안 그러면 메모리 낭비 라고 했던 것 같은데 근데 사실 close() 안해도 오류는 안난다. 노란 경고가 뜨지
# 생성한 객체를 close하면 그 객체는 다시 쓸 수 없다.
# next() Vs nextLine()
import java.util.Scanner;
public class Ex {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(" 입력 : ");
String fir = scanner.nextLine();
// 확인용 출력
System.out.println(fir);
System.out.print(" 입력 : ");
String sec = scanner.next();
// 확인용 출력
System.out.println(sec);
scanner.close();
}
}
다음과 같이 nextLine()은 띄어쓰기를 허용하며 \n까지의 모든 라인을 수용하지만
next()는 띄어쓰기 전까지의 토큰을 가져간다.
※ 가끔 nextInt() 같은 거 쓸 때 입력하지 않아도 다음 문장을 실행하는 경우가 있는데 이럴 때
scan.nextInt(); scan.nextLine(); 와 같이 쓰면 그런 에러를 방지할 수 있다. nextLine()이 \n 즉, enter를 먹기 때문이지
+ 최종 예제 +
import java.util.Scanner;
public class ScannerEx {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("년 월 일 요일 을 입력하세요 : ");
int year = scanner.nextInt();
int month = scanner.nextInt();
int day = scanner.nextInt();
String dayOfWeek = scanner.next();
// 확인용 출력
System.out.println(year+"년 " + month+"월 " + day+"일 " + dayOfWeek);
scanner.close();
}
}
'JAVA' 카테고리의 다른 글
[JAVA] # 09. 상속 (0) | 2020.11.12 |
---|---|
[JAVA] # 08. 클래스와 객체 (0) | 2020.11.11 |
[JAVA] # 07. 배열 (0) | 2020.11.05 |
[JAVA] 06. continue + break (0) | 2020.10.05 |
[JAVA] 03. 조건문 if + if-else + switch (0) | 2020.09.25 |
댓글