훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
Scanner
자바에서 어떤 곳에서든(키보드, 파일, 하드웨어 등) 입력(읽어 들이기)을 편하게 할 수 있도록 만든 것
오늘은 초보자용 "표준 입력" 즉 키보드에서 입력을 받는 방법에 대해서 간단하게 알아보겠습니다.
예제
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
- Scanner에서 기본적으로 next() 함수는 공백(개행 문자, spacebar, tab 등)을 기준으로 값을 읽어 들인다.
- System.in 이 표준 입력 (키보드)를 의미한다.
해당 행 실행과 동시에 키보드와의 연결 다리가 놓아졌다고 생각해도 된다. - 기본적으로 읽는 값은 String, 즉 문자열이지만
nextInt(), nextDouble() 등의 함수를 통해 자동으로 타입 변환이 가능하다. - 윈도우 기준으로 (ctrl + d)를 누르면 EOF (입력의 끝) 이기 때문에 hasNext() 함수가 false를 반환한다.
- close()를 통해 놓아 졌던 다리를 파괴한다.
주의사항
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
//다음과 같은 코드는 불가능하다.
Scanner scanner1 = new Scanner(System.in);
while (scanner1.hasNext()) {
System.out.println(scanner1.next());
}
scanner1.close();
Scanner scanner2 = new Scanner(System.in);
while (scanner2.hasNext()) {
System.out.println(scanner2.next());
}
scanner2.close();
}
}
표준 입력(키보드)과의 연결 다리는 기본적으로 JVM이 프로그램을 메모리에 띄울 때 (프로세스로 만들 때) 만들어준다.
그러므로 new Scanner(System.in)은 연결 다리를 내가 직접 만드는 것이 아니라 JVM이 마련해준 연결 다리를 끌어와서 쓰는 것일 뿐이다.
그러나 scanner1.close(); 가 실행됨과 동시에 표준 입력의 연결다리 자체가 끊어져버린다.
그러므로 scanner2 = new Scanner(System.in);으로 다리를 끌어오는 것은 불가능하다.
'Java' 카테고리의 다른 글
자바 배열과 메모리 (0) | 2021.03.30 |
---|---|
레퍼런스 변수와 메모리, 에러 (0) | 2021.03.30 |
타입 변환 (0) | 2021.03.23 |
상수 (0) | 2021.03.23 |
var변수 (0) | 2021.03.23 |