본문 바로가기

Java

Scanner로 키보드 입력 받기

훈수/저작권 관련 지적 환영합니다 - 댓글 또는 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();
    }
}

실행 예제

  1. Scanner에서 기본적으로 next() 함수는 공백(개행 문자, spacebar, tab 등)을 기준으로 값을 읽어 들인다.
  2. System.in 이 표준 입력 (키보드)를 의미한다.
    해당 행 실행과 동시에 키보드와의 연결 다리가 놓아졌다고 생각해도 된다.
  3. 기본적으로 읽는 값은 String, 즉 문자열이지만
    nextInt(), nextDouble() 등의 함수를 통해 자동으로 타입 변환이 가능하다.
  4. 윈도우 기준으로 (ctrl + d)를 누르면 EOF (입력의 끝) 이기 때문에 hasNext() 함수가 false를 반환한다.
  5. 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