본문 바로가기

복습용

표준 입출력

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

 

자료형 변수이름 설명
static PrintStream out 표준 출력 스트림
static InputStream in 표준 입력 스트림
static OutPutStream err 표준 오류 출력 스트림

 

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

 

문자 하나를 입력 받는 프로그램

프로그램을 실행하면 입력을 받기 위해 커서가 기다리고 있습니다. A라고 알파벳을 쓰고 Enter를 누르면 입력한 값이 변수i에 들어갑니다. i는 4바이트지만 System.in은 바이트 단위로 읽어 들이는 InputStream이므로 1바이트만 읽습니다. 읽어 들인 1바이트를 출력하면 문자에 대한 숫자 값, 즉 아스키 값을 출력합니다. 13행처험 문자로 변환하여 출력하면 입력한 A가 출력됩니다. 읽어 들일 때 사용한 InputStream의 read() 메소드는 한 바이트만을 읽어 들입니다.

 

문자 여러 개를 입력 받는 프로그램

while 문에서 read() 메소드를 이용해 한 바이트씩 읽어 들입니다. Enter에 해당하는 '\n' 값이 입력될 때까지 반복 수행됩니다. Enter가 입력되면 읽어 들인 내용을 화면에 출력합니다.

 

Scanner 클래스

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

대표 생성자를 살펴보겠습니다.

생성자 설명
Scanner(File source) 파일을 매개변수로 받아 Scanner를 생성합니다.
Scanner(InputStream source) 바이트 스트림을 매개변수로 받아 Scanner를 생성합니다.
Scanner(String source) String을 매개변수로 받아 Scanner를 생성합니다.

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

 

Scanner 클래스에서 제공하는 메소드는 다음과 같습니다.

 

 

메소드 설명
boolean nextBoolean() boolean 자료를 읽습니다.
byte nextByte() 한 바이트 자료를 읽습니다.
short nextShort() short 자료형을 읽습니다.
int nextInt() int 자료형을 읽습니다.
long nextLong() long 자료형을 읽습니다.
float nextFloat() float 자료형을 읽습니다.
double nextDouble() double 자료형을 읽습니다.
String nextLine() 문자열 String 을 읽습니다.

 

7행에서 표준 입력을 매개변수로 Scanner 클래스를 생성하였습니다. 이름과 직업은 문자열 이므로 nextLine() 메소드로 입력받고, 사번은 정수이므로 nextInt() 메소드를 사용합니다. 입력받은 자료를 그대로 출력하여 잘 입력되었는지 확인할 수 있습니다. 표준 입력 System.in을 사용하면 바이트 단위 자료만 처리할 수 있어 한글 같은 경우 보조 스트림을 추가로 사용해야 하는데, Scanner는 다양한 자료형을 입력할 수 있어 많이 활용합니다.

 

Console 클래스

System.in을 사용하지 않고 간단히 콘솔 내용을 읽을 수 있는 Console 클래스도 있습니다.

직접 콘솔 창에서 자료를 입력받을 때 이 클래스를 사용하는데, 이클립스와는 연동되지 않습니다.

사용하는 메소드는 다음과 같습니다.

 

메소드 설명
String readLine() 문자열을 읽습니다.
char[] readPassword() 사용자에게 문자열을 보여 주지 않고 읽습니다.
Reader reader() Reader 클래스를 반환합니다.
PrintWriter writer() PrintWriter 클래스를 반환합니다.

 

Console 클래스 실습

 

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

'복습용' 카테고리의 다른 글

예외 처리 미루기  (0) 2020.04.07
예외 클래스  (0) 2020.04.07
스트림  (0) 2020.04.07
21.Set 인터페이스  (0) 2020.04.06
20. List 인터페이스 ArrayList, LinkedList  (0) 2020.04.06