[Java] 시스템 입출력 방법 System.in.read(), Scanner 클래스 사용

    [시스템 입력장치 출력장치]

    프로그래밍 언어에는 시스템 표준 출력장치와 표준 입력장치가 있다. 일반적으로 표준 출력장치는 모니터이고, 표준 입력장치는 키보드이다.

     

    자바 프로그래밍을 하고 결과값을 보기 위해서 아래 코드를 작성 했을 것이다. System.out은 시스템의 표준 출력장치를 말한다.  System은 시스템이 가지고 있는, out은 출력 장치로, println()함수는 괄호안의 내용을 출력하고 행을 바꾸라는 뜻이다.

    System.out.println("출력 내용");

     

    ※ println()은 행을 바꾸라는 뜻인데 행을 바꾸고 싶지 않으면 print() 함수를 사용하면 되고, 다양한 양식으로 출력하고 싶으면 printf() 함수를 알아보면 된다.

     

    위와 반대로 시스템의 입력 장치는 System.in을 사용하고, 시스템의 표준 입력장치로 키보드를 읽기 위해서 read() 함수를 이용한다. read()함수는 키보드에서 입력된 키코드를 읽을 수 있는데 키 하나밖에 읽을 수 없다. 키코드는 프로그램에서 숫자로 된 키 하나에 대한 숫자값이다 그래서 정수형 타입에 저장할 수 있다.

    int keyCode = System.in.read();

     

     

    [System.in.read() 예제]

    아래 예제는 입력된 키코드를 저장하는 것이다. 아래 예제를 실행하면 이상한게 있는데 a를 치고 엔터를 쳤는데 키코드가 두번 출력된 것이다. 이유는 엔터 자체도 키코드 이기 때문에 사실상 a 키코드와 엔터 키코드를 두번 입력한 것이다.  자바에서 System.in.read() 가 실행되면 엔터키가 입력될 때까지 대기 상태가 되기 때문에 엔터를 꼭 입력해야 다음 코드가 실행된다.

    public class KeyCodeExample {
        public static void main(String[] args) throws IOException {
            int keyCode;
    
            keyCode = System.in.read();
            System.out.println("keyCode: " + keyCode);
    
            keyCode = System.in.read();
            System.out.println("keyCode: " + keyCode);
    
            keyCode = System.in.read();
            System.out.println("keyCode: " + keyCode);
        }
    }

     

     

    [Scanner 클래스]

    System.in.read() 단점은 여러개의 키를 한번에 읽을수 없다는 문제가 있어서 한글을 읽을수 없다. 그래서 나온게 Scanner 클래스 이다.

    Scanner scanner = new Scanner(System.in);
    
    String inputData = scanner.nextLine();

     

    new Scanner(System.in)은 시스템의 입력 장치로 부터 읽는 Scanner를 생성하는 코드이다. 생성된 Scanner는 scanner 변수에 담아서 언제든지 키보드에서 읽고 싶을 때 scanner.nextLine() 메소드를 실행하면 되고 scanner.nextLine() 메소드는 엔터키가 입력되기 전까지 대기 상태가 되며, 엔터 키가 입력되면 모든 내용을 문자열로 읽는다.

     

    ※ Scanner 관련 아래 글 참조

    https://deftkang.tistory.com/55

    댓글

    Designed by JB FACTORY