본문 바로가기

프로그래밍 언어/JAVA

JAVA 입문 - 표준 입출력

지난 글 : [프로그래밍 언어/JAVA] - JAVA 입문 - 자바 입출력과 스트림

 

자바에서는 화면에 출력하고 입력받는 표준 입출력 클래스가 이미 정의되어 있다. 이 클래스는 프로그램이 시작될 때 생성되므로 따로 만들 필요가 없다. 지금까지 화면 출력을 위해 사용한 System.out은 표준 출력을 위한 객체다. 표준 입출력은 콘솔 화면에 입출력된다 해서 콘솔 입출력이라고도 한다. 표준 입출력을 위한 System 클래스는 아래와 같이 세 개의 변수를 갖고 있다.

System.out은 표준 출력용, System.in은 표준 입력용 스트림이다. 빨간색으로 오류 메시지를 출력할 때는 System.err를 사용한다. out, in, err 모두 정적(static) 변수다. 지금까지 System 클래스를 생성하지 않고도 System.out을 사용할 수 있었던 이유가 out 변수가 System 클래스의 정적 변수이기 때문이다. 여태 공부하며 System.out은 많이 활용해 봤으니 사용자로부터 콘솔 입력을 받는 System.in을 알아보자.

 

System.in으로 화면에서 문자 입력받기

System.in을 활용해 문자를 입력받는 프로그램을 구현한다. 입출력에 관련한 코드를 구현하면 예외 처리를 해야한다. 아래처럼 하나의 문자를 입력받는 코드를 구현한다.

출력 결과

프로그램을 실행하면 콘솔 화면에 입력을 할 수 있다. A라고 알파벳을 쓰고 [Enter]를 누르면 입력한 값이 변수 i에 들어간다. i는 4바이트지만 System.in은 바이트 단위로 읽어 들이는 InputStream이므로 1바이트만 읽는다. 읽어드린 1바이트를 출력하면 문자에 대한 숫자 값(아스키 값)을 출력한다. 13행처럼 문자로 변환하여 출력하면 입력한 A가 출력된다. 이번에는 알파벳 여러 개를 쓰고 [Enter](\n)를 눌러 입력받는 코드를 구현하자.

출력 결과

[Enter]에 해당하는 '\n'값이 입력될 때가지 반복 수행된다. [Enter]가 입력되면 읽어 들인 내용을 화면에 출력한다.

 

그 외 입력 클래스

Scanner 클래스

Scanner 클래스는 java.util 패키지에 있는 입력 클래스다. Scanner 클래스는 문자뿐 아니라 정수, 실수 등 다른 자료형도 읽을 수 있다. 또 콘솔 화면뿐 아니라 파일이나 문자열을 생성자의 매개변수로 받아 자료를 읽어 올 수 있다. 여러 대상에서 자료를 읽는 Scanner 클래스의 생성자는 굉장히 다양하다. 여기서는 대표 생성자를 알아보자.

Scanner scanner = new Scanner(System.in)처럼 사용하면 표준 입력으로부터 자료를 읽어 들이는 기능을 사용할 수 있다. Scanner 클래스는 System.in으로 입력받는 것보다 다양한 메서드를 활용할 수 있기에 자주 사용한다고 한다. 

 

Scanner 클래스에서 제공하는 메서드는 아래와 같다.

Scanner 클래스를 활용해 표준 입력에서 다양한 자료를 읽어 온 후 출력하는 코드를 구현하자.

출력 결과

표준 입력 System.in을 사용하면 바이트 단위 자료만 처리할 수 있어 한글 같은 경우 보조 스트림을 추가로 사용해야하지만 Scanner는 다양한 자료형을 입력할 수 있어 많이 활용된다.

 

Console 클래스

System.in을 사용하지 않고 간단히 콘솔 내용을 읽을 수 있는 Console 클래스도 있다. 직접 콘솔 창에서 자료를 입력받을 때 이 클래스를 사용하는데, 이클립스와는 연동되지 않는다고 한다. 사용하는 메서드는 아래와 같다.

readPassword( ) 메서드를 사용해 비밀번호를 char[ ] 배열로 입력받는다. 비밀번호는 입력할 때 화면에 나타나지 않는다. Console 클래스는 Scanner와 마찬가지로 한글도 읽을 수 있지만 이클립스 같은 통합 개발 환경에서는 Console 클래스가 연동되지 않는 경우가 있어 Scanner를 더 많이 사용한다고 한다.

 

참고 서적 : 자바 프로그래밍 입문 - 박은종