표준 입력

표준 입력 스트림

이 문서에서는 표준 입력 스트림(System.in)을 이용하는 방법에 대해 다룬다.

표준 입력이란

일반적인 PC 환경에서 사용자가 컴퓨터에 입력을 수행할 수 있는 방법은 다음과 같은 것들이 있다.

  • 마우스를 이용한 명령 전달

  • 키보드를 이용한 값 전달

  • 마이크를 이용한 소리 전달

  • 카메라를 이용한 화면 전달

  • 스캐너를 이용한 문서 전달

  • 파일을 실행하여 내용 전달

  • 메신저 등을 통한 데이터 전달 등

콘솔 기반의 프로그래밍에서는 키보드를 통한 입력을 필수 요소로 간주하여 System.in이라는 이름으로 관리하며 임의로 수정하거나 변경할 수 없도록 한다. 그 외 다른 장치의 입력이 필요한 경우에는 추가적인 통로를 만들어야 처리할 수 있다.

표준 입력 명령

표준 입력 명령은 다음과 같이 존재한다.

  • System.in.read()

사용자가 입력한 값들을 배열이라는 것을 모르는 한 한 글자씩 받을 수 있도록 되어 있으며, 이는 ASCII 코드 기반이기 때문에 유니코드는 받을 수 없도록 되어 있다.

즉, 사용자가 hello라는 값을 입력한다면 다음과 같이 받을 수 있다.

int a = System.in.read();// h 를 ascii 코드값인 104로 입력받는다.
int b = System.in.read();// e 를 ascii 코드값인 101로 입력받는다.
int c = System.in.read();// l 를 ascii 코드값인 108로 입력받는다.
int d = System.in.read();// l 를 ascii 코드값인 108로 입력받는다.
int e = System.in.read();// o 를 ascii 코드값인 111로 입력받는다.

여기서 중요한 점은 사용자가 몇 글자를 입력할 지 모른다는 것이다. 따라서 몇 번의 명령을 사용해야 하는지와 변수가 몇 개 필요한지에 대해서 파악할 수 없다. 또한 엔터스페이스와 같은 값들도 ascii 코드를 가지고 있기 때문에 입력의 한 부분을 차지하며, 이를 처리하는 것은 꽤 손이 많이 가는 작업이다.

IOException

System.in.read를 사용하려고 작성하면 오류가 발생하는 것을 볼 수 있다. 이는 예외처리를 하지 않아서 발생하는 문제이며, 아직 배우는 단계가 아니기 때문에 간단히 요약하면 입력이 안될 수 있는 상황에 대한 처리를 하지 않았기 때문이다. 우선 main 메소드에 다음과 같이 추가하여 현재는 문제가 생겨도 처리하지 않을 것임을 명시한다.

public static void main(String[] args) throws IOException {

}

또한 IOExceptionjava.io라는 패키지에 존재하기 때문에 다음의 준비 코드도 필요하다.

import java.io.*;

정리하면 다음과 같은 코드가 있어야 입력을 받을 수 있다.

import java.lang.*;
import java.io.*;

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

결론

표준 입력은 생각보다 난이도가 높은 작업이기 때문에 직접 처리하기에는 알아야할 부분들이 많다. 따라서 자바에 존재하는 도구들 중 다음과 같은 것들을 사용하여 좀 더 수월하게 입력을 수행할 수 있다.

  • java.util.Scanner

  • java.io.BufferedReader

Last updated