<Scanner 활용>
Java에서 화면으로부터
리터럴을 입력받는 방법은 여러 가지가 있지만
eclipse에서 잘 동작하는
Scanner을 이용하는 방법에 대해 알아보자.
Scanner 클래스가 있는 위치를 import 하고
Scanner 클래스의 인스턴스를 생성한다.
그다음에 Scanner의 메서드 nextLine()를 호출한다.
하지만 아직 클래스, import, 인스턴스, 메서드에 대해
배우지 않았기 때문에 작동 원리나 구조 등을 지금은 알 수 없다.
이용하는 방법만 익혀 앞으로의 예제 및 과제 등에 활용해보자.
<Scanner 클래스의 인스턴스 생성>
먼저 Scanner를 사용하려면
Scanner scanner = new Scanner(System.in);
이 문장을 작성해야 하는데,
(Scanner 클래스의 인스턴스 생성)
이클립스에서 ctrl + space를 이용하면
빠르게 작성할 수 있다.
(1) sc를 작성하고 ctrl + space를 누르면
(2) 아래와 같이 sc로 시작되는 Template Proposals가 검색되는데
선택할 것 없이 바로 enter를 누른다.
(3) 그러면 아래와 같이 Scanner이 자동 완성되고
상단에 import java.util.Scanner;라는 문장이 자동 생성된다.
그다음 space로 한 칸을 띄우고 다시 ctrl + space를 누르면
(4) 아래와 같이 적당한 Template Proposals가 검색되고
바로 enter를 누르면 가장 위에 있는 것이 선택된다.
(5) 아래와 같이 scanner이 자동 완성된다.
(6) space로 한 칸 띄우고
대입 연산자(=)와 생성 연산자(new)를 입력하고
sc를 입력한 다음 ctrl + space를 누르면
(7) 아래와 같이 sc로 시작되는 Template Proposals가 검색되는데
선택할 것 없이 바로 enter를 누른다.
(8) 자동으로 Scanner()이 완성되고
괄호() 안에 커서가 잡히는데
(9) 내용을 지울 것도 없이 sy를 입력하여 덮어 씌우고 ctrl + space를 누르면
(10) 아래와 같이 sy로 시작되는 Template Proposals가 검색되는데
선택할 것 없이 바로 enter를 누른다.
(11) System이 자동 완성되고 마침표(.)를 입력하면
(12) System. 다음에 올 수 있는 것들이 검색된다.
고를 것 없이 바로 enter를 누른다.
(13) in까지 입력되었으면
오른쪽 방향키를 눌러 문장 끝으로 가서
(14) 세미콜론(;)을 입력하면 완성
만약 Scanner scanner = new Scanner(System.in);를
복사해서 붙여 넣기 한다면
아래와 같이 import java.util.Scanner;이 생성되지 않고
Scanner에 컴파일 에러가 발생한다.
그럴 때는 Scanner위에 마우스를 올리면
아래와 같이 컴파일 에러를 해결방법이 추천된다.
impot 'Scanner' (java.utill)을 선택한다.
그럼 아래와 같이 상단에
import java.util.Scanner;이 생성되고
컴파일 에러가 사라진다.
또는 Scanner scanner = new Scanner(System.in);를
복사해서 붙여 넣기 한 상태에서
빨간 줄이 그어진 Scanner 위에 커서를 찍고
단축키 ctrl + shift + m을 누르면
import가 생성된다.
<Scanner의 nextLine() 메서드 호출>
main 메서드 안에
Scanner scanner = new Scanner(System.in);를 작성하면
Scanner의 기능을 사용할 수 있게 되는데
많은 기능들 중에 nextLine()을 사용한다.
nextLine()은 입력한 내용을 문자열 String 타입으로 반환한다.
이 값을 int 타입으로 변환하면 숫자로 사용할 수도 있다.
실제로 입력값을 숫자로 받는
nextInt()와 nextFloat()가 있긴 하지만
오류가 잦아 사용하지 않는다.
nextLine() 사용방법은
String 타입의 변수를 만들어
화면으로 입력받는 문자열을 저장하여
그 변수를 이용해 값을 사용하면 된다.
import java.util.Scanner;
public class P040_Scanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // --- (1)
String input = scanner.nextLine(); // --- (2)
System.out.println(input); // --- (3)
System.out.println(input + 456); // --- (4)
}
}
위 예제는 다음과 같은 명령을 담고 있다.
(1) 화면으로 리터럴을 받을 수 있는 Scanner을 이용할 것이다. (의역)
(2) String 타입의 변수 input에 화면으로 입력받는 문자열 리터럴을 저장하라.
(nextLine() 오른쪽에 scanner.을 작성해야 하는데,
scanner의 s는 반드시 소문자여야 한다.)
(3) input에 저장된 문자열을 화면에 출력하라.
(4) input에 저장된 문자열에 정수 456을 결합하여 화면에 출력하라
이를 실행하면 아래와 같이 콘솔에 실행 중에
값을 받기 위해 일시 정지했다는 표시가 뜬다.
그때 콘솔을 클릭해서 문자열을 입력한다.
그리고서 enter를 누르면
입력받은 값으로 나머지 문장을 실행한다.
화면에 입력한 값은 문자열로
변수 input에 저장되기 때문에
input + 456은 연산되는 것이 아니라 결합이 된다.
<String 타입 → int 타입 : Integer.parseInt()>
123을 입력하여 456과 연산을 하고 싶다면
우선 String 타입의 문자열을 int 타입으로 변환해야 한다.
Integer.parseInt()를 이용하면 된다.
Integer.parseInt(input);은
문자열을 int 타입으로 변환해주는 기능인데,
해당 문자열이 숫자로만 이루어져 있어야 한다.
숫자가 아닌 문자, 기호, 공백이 있으면
에러가 발생한다.
import java.util.Scanner;
public class P040_Scanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
int num = Integer.parseInt(input);
System.out.println(input + 456);
System.out.println(num + 456);
}
}
위 예제를 실행하여 123이라는 문자열을 입력하면
화면에 입력한 문자열이 저장된 input과
456의 결합은 123456이지만
입력한 문자열을 int 타입으로 변환한 값이 저장된 num과
456의 연산은 579가 된다.
String input = scanner.nextLine();
int num = Integer.parseInt(input);
위 두 문장을 합쳐서
아래와 같이 한 문장으로 나타낼 수 있다.
int num = Integer.parseInt(scanner.nextLine());
'. Java의 정석' 카테고리의 다른 글
[Java] 10진법과 2진법, 10진수와 2진수 (0) | 2021.07.02 |
---|---|
[Java] Scanner의 활용 및 한글 입력 시 주의사항 (0) | 2021.07.02 |
[Java] printf()의 활용 (0) | 2021.07.02 |
[Java] print(), println(), printf() (0) | 2021.07.02 |
[Java] 문자 리터럴과 문자형 리터럴 (0) | 2021.07.02 |