표준 출력

표준 출력 스트림

이 문서에서는 자바에서 표준 출력 스트림을 이용하는 방법에 대해서 살펴본다.

표준 출력이란

표준 출력(Standard Output)이란 프로그램에서 외부 환경으로 일반 메세지를 출력하는 것을 말한다. 외부 환경은 운영체제(OS)라고 볼 수 있으며, 이러한 연결은 형태와 개수 등이 정해져 있기 때문에 자바에서 임의로 만들거나, 지울 수 없도록 되어 있다. 자바에서 표준 출력 스트림을 이용하기 위해서는 System.out을 사용하도록 되어 있으며, System.out 이란 System 도구 안에 있는 out이란 이름의 요소를 의미한다고 볼 수 있다(클래스에 대해서 배우면 좀 더 자세히 살펴볼 수 있다).

표준 출력 명령

표준 출력 명령 중 자주 사용되는 것들을 정리하면 다음과 같다.

  • System.out.print(내용) : 표준 출력 통로로 내용을 형태 그대로 출력한다.

  • System.out.println(내용) : 표준 출력 통로로 내용을 형태 그대로 출력한 뒤 개행문자를 출력한다.

  • System.out.printf(형식, 값...) : 표준 출력 통로로 형식과 값을 결합한 뒤 출력한다. C언어의 printf 명령과 유사하다.

System.out.print()

System.out.print(내용);

내용을 아무런 처리 없이 있는 그대로 출력하는 명령이다. 모든 데이터 형태가 출력 가능하기 때문에 데이터의 유형을 신경쓸 필요가 없다. 예를 들어 숫자 100을 출력하고 싶다면 다음과 같이 작성할 수 있다.

System.out.print(100);

hello라는 글자를 출력하고 싶다면 다음과 같이 작성한다.

System.out.println("hello");

이처럼 데이터의 유형에 맞게 다양한 형태의 값을 모두 출력할 수 있다. 좀 더 자세히 설명하자면 모든 데이터를 출력할 수 있도록 같은 이름으로 다양한 기능을 준비해 두었다고 표현할 수 있으며, 이를 나중에 메소드 오버로딩(Method Overloading)이라고 부른다. 이는 클래스 단원에서 배운다.

아래의 예시를 보면 데이터의 유형에 따른 출력이 가능한 것을 확인할 수 있다.

System.out.print(100);//정수(int)
System.out.print(100L);//정수(long)
System.out.print(3.14f);//실수(float)
System.out.print(3.14);//실수(double)
System.out.print(true);//논리(boolean)
System.out.print('a');//문자(char)
System.out.print("hello");//문자열(String)

실행 결과는 다음과 같이 나온다.

100
100
3.14
3.14
true
a
hello

System.out.print 명령은 출력되는 값에 아무런 처리를 하지 않기 때문에 여러 개의 명령을 사용해도 연속해서 출력된다는 특징을 가지고 있다. 이를 이용하여 연속해서 나오는 데이터도 나누어 출력할 수 있다.

System.out.print("홍");
System.out.print("길");
System.out.print("동");

주의사항은 반드시 내용이 한 개 있어야 한다는 것이며, 내용이 없거나 두 개 이상인 경우는 사용이 불가능하다는 것이다.

System.out.print();//오류 : 출력 내용 없음
System.out.print(1, 2);//오류 : 출력 내용 여러 개

System.out.println()

앞서 살펴본 System.out.print 명령과 동일한 작업을 수행하지만 출력 후 개행 처리를 한다는 점이 다르다. 개행이란 우리가 흔히 알고 있는 엔터에 해당하는 작업을 말하며, 다음 줄로 커서를 옮기는 작업을 의미한다. 이를 문자로 표현하면 \n이라고 한다.

예제를 살펴보면 다음과 같다.

System.out.println("홍");
System.out.println("길");
System.out.println("동");

위의 출력에 대한 결과는 다음과 같다.



이는 다음 코드와 동일하다고 볼 수 있다.

System.out.print("홍");
System.out.print("\n");
System.out.print("길");
System.out.print("\n");
System.out.print("동");
System.out.print("\n");

일반적으로 출력을 할 때 출력이 완료되면 줄을 바꾸어야 하는 경우가 종종 있는데, 이 때 System.out.print를 사용하면 번거롭기 때문에 System.out.println을 사용하여 편리하게 처리하도록 지원하고 있다.

System.out.println 사용 시 값이 없으면 단순 개행을 처리한다. 하지만 System.out.print처럼 한 개가 넘는 값은 가질 수 없다.

System.out.println();//개행
System.out.println(1, 2);//오류 : 값이 많음

System.out.printf()

자바는 C언어에서 파생된 언어이기 때문에 C언어의 문법과 비슷한 부분이 많다. System.out.printf도 이 중 하나라고 볼 수 있으며, C계열 언어 사용자들의 편의를 위해서 준비된 명령이라고 볼 수 있다.

System.out.printf("형식",...);

실제 사용은 다음과 같이 한다.

System.out.printf("키 = %d cm", 180);

출력 결과는 다음과 같다.

키 = 180 cm

형식에 사용되는 문자는 다음과 같으며, 실제로 출력되는 것이 아니라 뒤의 값과 결합될 위치와 형태를 지정하는 역할을 수행한다.

형식이 맞지 않으면 정상적인 출력이 이루어지지 않기 때문에 자료형을 고려하지 않고 모두 출력하는 이전의 명령들보다 불편한 점도 있다. 하지만 문자열이 값과 섞여 있는 경우 편하게 출력이 가능하다.

단, 개행이 자동으로 이루어지지 않으니 주의하도록 한다.

//다음 세 명령은 동일한 출력 결과를 가진다.
int month = 8, day = 31;
System.out.print(month + "월은 " + day +"일 까지 있습니다.\n");
System.out.println(month + "월은 " + day +"일 까지 있습니다.");
System.out.printf("%d월은 %d일 까지 있습니다.\n", month, day);

이외에도 자리수 지정, 소수점 제어 등 다양한 기능이 있어 활용도는 높은 편이다. 하지만 순수 자바 명령이라고 보기 어렵기 때문에 이후의 문서에서는 다루지 않는다.

소수점 제어

System.out.printf("2자리 출력 = %.2f", 1.23456");

자리수 제어

자리수를 확보하고 출력할 수 있으며, 정렬 방향은 오른쪽이 + 또는 생략, 왼쪽이 -이다.

System.out.printf("여름 = %5d, %5d, %5d월\n, 6, 7, 8);
System.out.printf("여름 = %+5d, %+5d, %+5d월\n, 6, 7, 8);
System.out.printf("여름 = %-5d, %-5d, %-5d월\n, 6, 7, 8);

Last updated