Java - print, println, printf 출력문의 모든 것

자바스크립트에서는 console.log() 로 출력결과를 보고

Java에서는 System.out.print() 를 통해 출력 결과를 볼 수 있습니다.

 

우선, print와 println은 간단합니다.

다음 코드를 통해 쉽게 이해할 수 있습니다.

 

print

print는 한줄로 결과를 출력합니다.

		System.out.print("자바의");
		System.out.print(" 정석");
		System.out.print(" 정독하기");

결과

 

println

println은 각 결과를 줄 바꿈을 통해 출력합니다.

		System.out.println("자바의");
		System.out.println(" 정석");
		System.out.println(" 정독하기");

결과

 

 


printf - 형식화된 출력

보통 출력의 결과를 보고 싶을 때, print나 println을 주로 사용하는데 이 방식은 변수의 값이 정해진 그대로 출력합니다.

하지만 출력할때 값 또는 형식을 바꾸어 출력하고 싶을 수도 있습니다.

이때, printf 를 사용합니다.

 

printf()의 지시자
지시자 설명
%b boolean 형식으로 출력
%d 10진 ( decimal ) 정수의 형식으로 출력
%o 8진 ( octal ) 정수의 형식으로 출력
%x, %X 16진 ( hexa-dcimal ) 정수의 형식으로 출력
%f 부동 소수점 ( floating-point )의 형식으로 출력
%e, %E 지수 ( exponent ) 표현식의 형식으로 출력
%c 문자 ( character )로 출력
%s 문자열 ( string )로 출력

 

printf의 형식은 다음과 같습니다.

System.out.printf("변수=지시자", 변수) 

위 지시자를 통해 어떻게 출력 결과를 변환하는지 다음 예제를 통해 알아봅시다. 

 

예제 1
public class PrintfEX1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte b = 1;
		short s = 2;
		char c = 'A';
		int i = 13;
		String str = "안녕하세요";
		long big = 100_000_000L; // 100000000 ( _ : 천의자리 구분 )
		long hex = 0xFFFF_FFFF_FFFFL; // FFFFFFFFFFFF
		int octNum = 010; // 8진수 : 10 ( 접두사 : 0 ), 10진수 : 8
		int hexNum = 0x10; // 16진수 : 10 ( 접두사 : 0x ), 10진수 : 16
		int binNum = 0b10; // 2진수 : 10 ( 접두사 : 0b ), 10진수 2
		
		float f1 = .10f; // ( f : float 접미사 ) 0.10 , 1.0e-1
		float f2 = 1e1f; // 10.0, 1.0e1, 1.0e+1
		float f3 = 3.14e3f;
		double d = 1.23456789;
		
		System.out.printf("b=%d%n", b);
		System.out.printf("s=%d%n", s);
		System.out.printf("c=%c%n", c);
		System.out.printf("c=%c, %d%n", c, (int)c);
		System.out.printf("i=%d%n", i);
		
		System.out.printf("big=%d%n", big);
		System.out.printf("hex=%x%n", hex);
		System.out.printf("hex=%#x%n", hex); // #을 붙이면 접두사도 포함시킴
		
		System.out.printf("octNum=%o, %d%n", octNum, octNum); // 8진수, 10진수
		System.out.printf("hexNum=%x, %d%n", hexNum, hexNum); // 16진수, 10진수
		System.out.printf("binNum=%b, %d%n", binNum, binNum); // boolean, 10진수	
		System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum); // boolean, 10진수	
		
		System.out.printf("f1=%f1, %e, %g%n", f1, f1, f1); // %e는 지수형태, %g는 값을 간략하게 표현
		System.out.printf("f2=%f2, %e, %g%n", f2, f2, f2);
		System.out.printf("f3=%f3, %e, %g%n", f3, f3, f3);
		
		System.out.printf("d=%f%n", d);
		System.out.printf("d=%14.10f%n", d); // 전체 14자리 중 소수점 10자리
		System.out.printf("d=%014.10f%n", d); // 전체 14자리 중 소수점 10자리
}
}

결과

  • 변수 c

위 예시 중에서 c 변수를 보면 문자와 숫자 둘 다 출력하였습니다.

C언어에서는 형변환 없이 출력하는게 허용되지만, 자바에서는 허용되지 않기에

문자 변수 c를 %d 지시자로 10진수 정수로 변환하기 위해선 (int) c 로 형변환이 꼭 필요합니다.

 

 

  • 변수 binNum

2진수로 출력해주는 지시자가 없기 때문에 정수를 2진 문자열로 변환해주는 Integer.toBinaryString(int) 메서드를 사용해야합니다.

이 메서드는 정수를 2진수로 변환해서 문자열로 반환하기 때문에, 지시자 %s를 사용했습니다.

 

 

  • 변수 f1, f2, f3 와 변수 d

실수형 값의 출력에 사용되는 지시자는 %f, %e, %g가 있습니다. 이 중 %f가 주로 사용되고,

%e는 지수형태로 출력할때, %g는 값을 간략하게 표현할때 사용합니다.

%f 지시자는 기본적으로 소수점 아래 6자리 까지만 출력하기 때문에 소수점 아래 7자리에서 반올림합니다.

 

d 변수를 보면 1.23456789소숫점 아래로 6자리가 넘어가기 때문에 소수점 아래 7번째 자리인 8에서 반올림해 1.234568이 출력되었습니다.

 

d=%14.10f %전체자리수.소수점아래자리f 로, 전체 14자리 중 소수점 아래 10자리를 뜻합니다. ( 앞은 공백, 뒤는 0을 추가)

그래서 1.2345678900 의 앞이 공백으로 출력되고 뒤의 00소숫점 아래를 10자리로 맞추기 위해 추가되었습니다.

 

d=%014.10 지정하면 양쪽 빈자리를 모두 0으로 채워 , d=%14.10f 일 때 앞의 공백이였던 2자리가 00으로 채워져 001.2345678900 이 출력되었습니다.

 

 

예제2

아래 예제처럼 글자수의 크기를 정하여 출력할 수 있습니다.

public class PrintfEX2 {

	public static void main(String[] args) {

		int i = 10;
		String url = "www.hstory0208.com";
		
		System.out.printf("i=[%5d]%n", i); // 5글자의 출력공간 확보 (양수는 오른쪽 정렬 )
		System.out.printf("i=[%10d]%n", i); // 10글자의 출력공간 확보  (양수는 오른쪽 정렬 )
		System.out.printf("i=[%50d]%n", i); // 50글자의 출력공간 확보 (양수는 오른쪽 정렬 )
		
		System.out.printf("i=[%-5d]%n", i); // 5글자의 출력공간 확보 (음수는 왼쪽 정렬 )
		
		System.out.printf("i=[%05d]%n", i); // 5글자를 확보하고 공백에 0을 채움
		
		System.out.printf("[12345678901234567890]%n");
		
		System.out.printf("[%s]%n", url); // 문자열의 길이만큼 출력공간 확보
		System.out.printf("[%20s]%n", url); // 문자열의 길이 : 20만큼 출력공간 확보 ( 양수는 오른쪽 정렬 )
		System.out.printf("[%30s]%n", url); // 문자열의 길이 : 30만큼 출력공간 확보 ( 양수는 오른쪽 정렬 )
		
		System.out.printf("[%-20s]%n", url); // 문자열의 길이 : 20만큼 출력공간 확보 ( 음수는 왼쪽 정렬 )
		System.out.printf("[%-30s]%n", url); // 문자열의 길이 : 30만큼 출력공간 확보 ( 음수는 왼족 정렬 )
		
		System.out.printf("[%.8s]%n", url);  // 왼족에서 8글자만 출력
		
	}

}

결과