Java에서 printf() 메서드를 사용하면 java.io.PrintStream 또는 java.io.PrintWriter에 서식이 지정된(formatting) 출력을 손쉽게 작성할 수 있습니다. 특히 이 두 클래스에는 동일한 기능을 수행하는 format() 메서드도 함께 제공되므로, 여기서 소개하는 printf()의 사용법은 그대로 format() 메서드에도 적용할 수 있습니다.
기본 문법
System.out.printf("형식 문자열" [, 인수1, 인수2, ... ]);
형식 문자열 안에는 %로 시작하는 형식 지정자(format specifier)를 넣어 데이터가 출력될 위치와 모양을 지정합니다. 대표적인 형식 지정자는 다음과 같습니다.
%d: 10진수 정수%o: 8진수 정수%x: 16진수 정수%f: 부동소수점 숫자%s: 문자열%n또는\n: 줄바꿈
예제 1: 진법 변환과 문자열 폭 지정
import java.io.PrintStream;
public class PrintfTest1 {
public static void main(String[] args) {
int i = 1234;
System.out.printf("Decimal: %1$,d Octal: %1$o Hex: %1$x"\n, i);
String str = "Tutorials Point";
System.out.printf("%15s", str);
}
}
실행 결과
Decimal: 1,234 Octal: 2322 Hex: 4d2 Tutorials Point
위 예제에서 %1$,d, %1$o, %1$x처럼 1$를 붙이면 첫 번째 인수(i)를 반복해서 참조합니다. 쉼표(,) 플래그는 천 단위 구분 기호를 추가하고, 각각 10진수, 8진수, 16진수로 변환하여 출력합니다. 또한 %15s는 문자열을 폭 15칸 안에서 오른쪽 정렬하여 출력합니다.
예제 2: format() 메서드와 왼쪽 정렬
public class PrintfTest2 {
public static void main(String[] args) {
String name = "Adithya";
int age = 30;
System.out.format("%-10s - %4d\n", name, age);
}
}
실행 결과
Adithya - 30
이번 예제에서는 format() 메서드를 사용했습니다. %-10s에서 하이픈(-) 플래그는 문자열을 폭 10칸 안에서 왼쪽 정렬하라는 의미이며, %4d는 정수를 폭 4칸 안에서 오른쪽 정렬하여 출력합니다. 이처럼 폭(width)과 정렬 옵션을 조합하면 표 형태의 깔끔한 콘솔 출력을 만들 수 있습니다.
정리
printf()와 format() 메서드는 C 언어 스타일의 형식 지정자를 활용해 가독성 높은 출력을 제공합니다. 진법 변환, 천 단위 구분 기호, 문자열 폭 조절, 좌우 정렬 등 다양한 옵션을 익혀두면 로그나 보고서 형태의 출력을 작성할 때 큰 도움이 됩니다.