[Java의 정석] 형식화된 출력 - printf()

말하는 감자·2023년 10월 22일
0

Java의 정석

목록 보기
13/32
post-thumbnail

Chapter 02 변수(Varialbe)

2. 변수의 타입

📌 형식화된 출력 - printf()

println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 같은 값이라도 다른 형식으로 출력하고 싶을 때가 있다. 예를 들면, 소수점 둘째자리까지만 출력한다든가, 정수를 16진수나 8진수로 출력한다든가. 이럴 때 printf()를 사용하면 된다.
printf()는 '지시자(specifer)'를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능을 가지고 있다. '지시자'는 값을 어떻게 출력할 것인지 지정해주는 역할을 한다. 정수형 변수에 저장된 값을 10진 정수로 출력할 때는 지시자 '%d'를 사용하며, 변수의 값을 지정된 형식으로 변환해서 지시자대신 넣는다. 예를 들어 int타입의 변수 age의 값이 14일 때, printf()는 지시자 '%d'대신 14를 넣어서 출력한다.

System.out.prinf("age:%d", age);
➡️ System.out.prinf("age:%d", 14);
➡️ System.out.prinf("age:14"); // "age:14"가 화면에 출력된다.

만일 출력하려는 값이 2개라면, 지시자도 2개를 사용해야하며 출력된 값과 지시자의 순서는 일치해야 한다. 물론 3개 이상의 값도 지사자를 지정해서 출력할 수 있으며 개수의 제한은 없다.

println()과 달리 printf()는 출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 따로 넣어줘야 한다.
'\n'을 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 때문에 '%n'을 사용하는 것이 더 안전하다.

정수를 출력할 때는 지시자 '%d'를 사용하는데, 출력된 값이 차지할 공간을 숫자로 지정할 수 있다. 여러 값을 여러 줄로 간격 맞춰 출력할 때 꼭 필요한 기능이다.

long finger = 10;

System.out.prinf("finger = [%5d]%n", hex);    // finger = [   10]
System.out.prinf("finger = [%-5d]%n", hex);   // finger = [10   ]
System.out.prinf("finger = [%05d]%n", hex);   // finger = [00010]

지시자 '%x'와 '%o'에 '#'를 사용하면 접두사 '0x'와 '0'이 각각 붙는다. 그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다.

long hex = 0xFFFF_FFFF_FFFF_FFFFL;

System.out.prinf("hex = %x%n", hex);   // hex = ffffffffffffffff
System.out.prinf("hex = %#x%n", hex);  // hex = Oxffffffffffffffff
System.out.prinf("hex = %#X%n", hex);  // hex = OXFFFFFFFFFFFFFFFF

10진수를 2진수로 출력해주는 지시자는 없기 때문에, 정수를 2진 무자열로 변환해주는 Integer.toBinaryString(int i)를 사용해야 한다. 이 메서드는 정수를 2진수로 변환해서 문자열로 반환하므로 지시자 '%s'를 사용했다.

int binNum = 0b10;  // 2진수 10, 10진수로는 2

System.out.printf("binNum=%s%n", Integer.toBinaryString(binNum));

그리고 C언어에서는 char타입의 값을 지시자 '%d'로 출력할 수 있지만, 자바에서는 허용되지 않는다. 아래와 같이 int타입으로 형변환해야만 '%d'로 출력할 수 있다.

char c = 'A';

System.out.printf("c=%c, %d %n", c, (int)c); // 형변환이 꼭 필요하다.

// "c=A, 65"이 화면에 출력된다.

실수형 값의 출력에 사용되는 지시자는 '%f', '%e', '%g'가 있는데, '%f'가 주로 쓰이고, '%e'는 지수형태로 출력할 때, '%g'는 값을 간략하게 표현할 때 사용한다.
'%f'는 기본적으로 소수점 아래 6자리까지만 출력한다.


📑 원본 자료

  • Java의 정석(3판) [남궁 성/도우출판/2016]
profile
나는 말하는 감자다

0개의 댓글