콘솔(Console)이란?
- 사용자의 입력을 받거나 사용자에게 문자열을 출력해 주는 역활을 하는 것을 말한다.
콘솔 입력
System.in
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws IOException {
InputStream in = System.in;
int a;
a = in.read();
System.out.println("a = " + a);
// 입력한 바이트의 출력한 바이트보다 큰 경우, InputStream을 비우기 위한 방법
System.in.read(new byte[System.in.available()]);
}
}
- InputStram은 자바의 내장 클래스이며, java.lang 패키지에 속해 있지 않은 자바 내장 클래스의 경우, 필요할 때마다 import해서 사용한다.
- System 이나 String 등의 클래스는 자바 프로그래밍에 필요한 가장 기본적인 클래스가 모여있는 패키지인 java.lang 패키에 속해 있는 클래스로써 별도의 import 과정이 필요 없다.
- System.in은 InputStream의 객체이며, InnputStream의 read 메소드는 1byte 크기의 사용자의 입력을 받아들인다.
다만, read 메소드로 읽은 1byte의 데이터는 int 자료형으로 저장되며, 0 ~ 255 사이의 정수값으로 아스키코드 값이 저장된다.
- InputStram의 read 메소드가 호출되면 사용자의 입력을 받을 때까지 프로그램은 대기하고 있는다.
- throws IOException는 InputStream으로부터 값을 읽어 들일 때는 IOException라는 예외가 발생할 수 있기 때문에 이를 처리를 해야 하는데 throws로 예외 처리를 뒤로 미루게 하는 것이다.
InputStream
- 바이트(byte) 단위의 데이터를 읽어 들일 때 사용하는 내장 클래스이다.
- InputStream의 read 메서드는 1byte만 읽기 때문이다.
- 스트림(stream)은 byte의 흐름을 추상화한 개념이며 데이터를 byte 단위로 다룬다.
- 길이가 3byte인 배열을 만든 후 read 메서드의 입력값으로 전달하면 콘솔 입력이 해당 배열에 저장된다.
InputStreamReader
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Sample {
public static void main(String[] args) throws IOException {
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
char[] a = new char[3];
reader.read(a);
System.out.println("a = " + a);
// 입력한 바이트의 출력한 바이트보다 큰 경우, InputStream을 비우기 위한 방법
System.in.read(new byte[System.in.available()]);
}
}
- InputStream이 byte 단위로 하나의 문자만 입력 스트립에서 읽는 것과 달리 InputStreamReader를 사용하면 문자열로 입력 받을 수 있다.
- InputStreamReader를 사용하기 위해 import 문이 하나 더 추가하여야 하고, InputStreamReader는 객체를 생성할 때 생성자의 입력으로 InputStream 객체가 필요하다.
- InputStreamReader를 이용하면 byte 배열이 아닌 char 배열을 사용하여 입력 값을 담을 수 있다.
BufferedReader
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Sample {
public static void main(String[] args) throws IOException {
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
String a = br.readLine();
System.out.println("a = " + a);
// 입력한 바이트의 출력한 바이트보다 큰 경우, InputStream을 비우기 위한 방법
System.in.read(new byte[System.in.available()]);
}
}
- 사용자가 입력한 값을 길이에 상관없이 모두 받아들이고자 할 때 사용한다.
- BufferedReader를 이용하기 위해 import 문이 하나 더 추가하여야 하고, BufferedReader는 객체를 생성할 때 생성자의 입력으로 InputStreamReader의 객체가 필요하다.
- BufferedReader의 readLine 메서드를 이용하면 사용자가 입력한 문자열 전부를 읽을 수 있게 된다.
Scanner
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(sc.next());
}
}
- java.util. Scanner 클래스를 이용하면 콘솔 입력을 보다 쉽게 처리할 수 있다.
- Scanner를 사용하기 위해서는 먼저 java.util.Scanner 클래스를 import 해야 한다.
- Scanner 클래스는 생성자의 입력으로 System.in 객체가 필요한 데, 이는 InputStream이 필요하다는 의미이다.
아래의 도표는 Scanner 클래스에서 토큰 뿐만 아니라 숫자, 문자열 등을 읽어 들일 때 사용되는 주요 메소드 들이다.
메소드 | 설명 |
next() | 문자를 입력할 때 사용하며 공백은 입력이 불가능하다. |
nextLine() | 문자와 공백을 포함한 라인을 입력할 때 사용한다. |
nextInt() | 정수를 입력할 때 사용하며 공백은 입력이 불가능하다. |
콘솔 출력
System.out
- PrintStream 클래스의 객체이며, PrintStream은 콘솔에 값을 출력하는 데 사용되는 클래스이다.
- System.out.println()은 콘솔에 문자열을 출력할 때나 디버깅할 때 많이 사용된다.
아래의 도표는 System.out의 주요 메소드이다.
메소드 | 설명 |
println("문자열") | 문자열을 출력한 후 다음 출력은 다른 줄에 한다. 문자열이 없는 경우, 다음 줄로 개행을 한다. |
print("문자열") | 문자열을 출력한 후 다음 출력은 같은 줄에 한다. |
printf(...) | 문자열을 원하는 형식으로 출력한다. |
System.out.printf
printf() 메소드의 출력 형식
System.out.printf('%' + 옵션 + '서식지정자', 값1, ...);
- 옵션 : 출력 값의 필드 폭과 소수점 이하 자릿수 지정
- 서식지정자 : 출력될 데이터 타입 지정
- 서식지정자의 종류
서식 지정자 | 출력 형태 |
%d | 10진수 정수로 출력 |
%o | 8진수 정수로 출력 |
%x | 16진수 정수로 출력 |
%f | 10진수 실수로 출력 |
%e | 지수 형식으로 실수 출력 |
%c | 문자로 출력 |
%s | 문자열로 출력 |
예제
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
System.out.println("== 출력 ==");
System.out.println("Hello");
System.out.println("World!");
System.out.print("Hello ");
System.out.print("World!");
System.out.println();
System.out.printf("Hello ");
System.out.printf("World!");
System.out.println();
String str = "자바";
int grade = 3;
System.out.println(str + "는 언어 선호도 " + grade + "위 입니다.");
System.out.printf("%s는 언어 선호도 %d위 입니다.\n", str, grade);
System.out.printf("%d\n", 10);
System.out.printf("%o\n", 10);
System.out.printf("%x\n", 10);
System.out.printf("%f\n", 5.2f);
System.out.printf("%c\n", 'A');
System.out.printf("%s\n", "안녕하세요.");
System.out.printf("%-5d\n", 123);
System.out.printf("%5d\n", 1234);
System.out.printf("%5d\n", 12345);
System.out.printf("%.2f\n", 1.12645123f);
}
}
/*
<<< 출력 예시 >>>
== 출력 ==
Hello
World!
Hello World!
Hello World!
자바는 언어 선호도 3위 입니다.
자바는 언어 선호도 3위 입니다.
10
12
a
5.200000
A
안녕하세요.
123
1234
12345
1.13
*/
⊙ 참고 문헌
- 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-13-1.입출력_1」, 제로베이스, 2024, https://zero-base.co.kr/
- 박응용, 「점프 투 자바:06장 자바의 입출력:06-01 콘솔 입출력」, 위키독스, 2024.07.11, https://wikidocs.net/226
- 이병승, 「초보 개발자를 위한 자바:한 권으로 배우는 자바 마스터 가이드 북」, 영진닷컴, 2024, p112 - 117