C/C++을 공부할 때는 printf(), scanf(), cout, cin을 같이 배웠다.
하지만 JAVA를 공부할 때는 System.out.println()과 같은 출력문은 먼저 사용해도, 표준입출력을 다루기 위한 스트림(Stream)은 거의 마지막에 배우게 되므로
우선 간단한 표준입출력 방법 몇 가지를 알아놓는 것이 좋을 것 같다.
표준입출력
- 입출력을 위한 파일이나 주변 장치를 특별히 지정하지 않았을 경우에 사용되는 말그대로 표준적인 입출력 방식이다.
- 보통 표준 입력은 키보드를 통해서, 표준 출력은 터미널의 화면을 통해서 이루어진다.
JAVA에서의 표준 출력은 많이 사용했다시피 다음과 같다.
이 중 println()과 print()는 큰 어려움없이 사용할 수 있으나, printf()의 경우 형식 지정자에 대한 지식이 필요하다. C언어의 printf()와 비슷하다.
| Format Specifier | 내용 |
|---|---|
| %d | 10진수 정수 |
| %o | 8진수 정수 |
| %x | 16진수 정수 |
| %c | 문자 |
| %s | 문자열 |
| %f | 실수 |
c언어와 다른 것은 long 형을 받기 위한 %ld나, double형을 받기 위한 %lf 가 없고 위에 명시대로 사용하면 된다.
정수 및 실수의 자리수를 채우는 것은 c언어와 같다.
예를 들어 5자리 정수를 채우기 위해선
System.out.printf("%5d", 123); // 123
System.out.printf("%5d", 1234); // 1234
System.out.printf("%5d", 12345); // 12345
빈 자리를 (0으로) 채우기 위해선
System.out.printf("%05d", 123); // 00123
System.out.printf("%05d", 1234); // 01234
System.out.printf("%05d", 12345); // 12345
소수점 밑 15자리를 채우기 위해선
System.out.printf("%.15f", 1.123); // 1.123000000000000
위와 같이 사용이 가능하다.
또한 개행, 탭과 같은 것들도 c언어에서 사용하던 printf()처럼
이스케이프 문자(\) 를 사용하여 \n, \t 를 사용하면 된다.
표준 입력은 크게 다음 4가지 방법이 있으며, 이 중 Scanner가 가장 많이 쓰인다.
int a = System.in.read() - '0';
System.out.println("a = " + a);
System.in.read(new byte[System.in.available()]);
InputStreamReader reader = new InputStreamReader(System.in);
char[] c = new char[3];
reader.read(c);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s1 = br.readLine();
여기까지를 정리하면 다음과 같이 나타낼 수 있다.
| 클래스 | 단위 | Syntax | 메서드 |
|---|---|---|---|
| InputStream | byte | InputStream in = System.in | read() |
| InputStreamReader | char | InputStreamReader reader = new InputStreamReader(in) | read() |
| BufferedReader | String | BufferedReader br = new BufferedReader(reader) | readLine() |
Scanner sc = new Scanner(System.in);
System.out.println(sc.next()); // 공백, 개행 전까지 데이터를 읽어옴
sc.nextLine(); // 개행 소진을 위함
System.out.println(sc.nextInt()); // 데이터를 하나 받아옴(Integer형만 가능)
sc.nextLine(); // 개행 소진을 위함
System.out.println(sc.nextLine()); // 공백을 포함하여 읽어오며, 일반적으로 많이 사용