
소개
Java의 String.format() 메소드는 개발자가 미리 정의된 형식에 변수 값을 삽입하여 동적 문자열을 생성할 수 있는 강력한 도구입니다. C 프로그래밍 언어에서 가져온 이 메소드는 숫자, 날짜 및 기타 객체를 포함한 다양한 유형의 데이터로 문자열을 구성하는 유연한 방법을 제공합니다. String.format()의 사용 방법을 이해하면 복잡한 문자열 작업을 다룰 때 코드의 가독성과 유지 관리성을 향상시킬 수 있습니다.
String.format() 기본사항
Java의 String.format() 메서드는 java.lang 패키지의 일부이며, 모든 Java 프로그램에 자동으로 import됩니다. 이 메서드는 형식을 지정한 다음 해당 형식에 하나 이상의 인수를 삽입하여 형식화된 문자열을 생성하는 방법을 제공합니다. 이 메서드는 제공된 형식과 인수를 기반으로 구성된 문자열을 반환합니다.
구문
String.format() 메서드의 기본 구문은 다음과 같습니다:
String formattedString = String.format(String format, Object... args);
- 형식: 텍스트와 형식 지정자를 포함하는 형식 문자열입니다.
- args: 형식 지정자에 해당하는 인수들입니다.
간단한 예제를 보여드리겠습니다:
int value = 42;
String result = String.format("The value is %d.", value);
System.out.println(result); // 결과: The value is 42.
이 예제에서 %d는 형식 지정자로, String.format() 메서드에 정수 값 42를 문자열에 삽입하도록 지시합니다.
형식 지정자 이해하기
형식 지정자는 String.format() 메서드 내에서 중요한 구성 요소로, 해당 인수가 출력 문자열에서 어떻게 표시되어야 하는지를 결정하는 자리 표시자 역할을 합니다. 각 형식 지정자는 % 문자로 시작하고, 해당 인수의 형식을 설명하는 문자 또는 문자 시퀀스로 구성됩니다.
기본 형식 지정자
다음은 Java에서 가장 일반적으로 사용되는 형식 지정자 중 일부입니다:
- %d: 정수를 십진수로 형식화하는 데 사용됩니다. 예를 들어, 문자열에 정수를 삽입하려면 %d를 사용해야 합니다.
int age = 25;
String formatted = String.format("나는 %d살이다.", age);
System.out.println(formatted); // 출력: 나는 25살이다.
- %f: 부동 소수점 숫자를 형식화하는 데 사용됩니다. %f는 기본적으로 소수점 뒤에 여섯 자리를 표시하지만 이를 조정할 수 있습니다.
double price = 19.99;
String formatted = String.format("가격은 $%.2f", price);
System.out.println(formatted); // 출력: 가격은 $19.99
- %s: 이 스펙별 formatter는 문자열을 형식화합니다. 특히 텍스트를 삽입하거나 여러 문자열을 결합해야 할 때 유용합니다.
String firstName = "Alex";
String lastName = "Obregon";
String formatted = String.format("안녕, %s %s!", firstName, lastName);
System.out.println(formatted); // 출력: 안녕, Alex Obregon!
- %c: 이 스펙별 formatter는 단일 문자를 형식화하는 데 사용됩니다. 문자열 내에 문자를 포함해야 하는 상황에 이상적입니다.
char letter = 'A';
String formatted = String.format("첫 번째 글자는 %c입니다.", letter);
System.out.println(formatted); // 출력: 첫 번째 글자는 A입니다.
- %b: 이 스페셜 포맷터는 boolean 값 (true 또는 false)을 포맷하는 데 사용됩니다. boolean 값을 문자열로 변환합니다.
boolean isJavaFun = true;
String formatted = String.format("Java가 재미있습니까? %b", isJavaFun);
System.out.println(formatted); // 출력: Java가 재미있습니까? true
- %x: 이 스페셜 포맷터는 정수를 16진수로 변환하여 포맷합니다. 16진수 표현이 일반적인 프로그래밍 컨텍스트에서 유용합니다.
int value = 255;
String formatted = String.format("16진수 값: %x", value);
System.out.println(formatted); // 출력: 16진수 값: ff
- %e: 이 서식 지정자는 부동 소수점 숫자를 과학적 표기법으로 서식화하는 데 사용됩니다.
double number = 12345.6789;
String formatted = String.format("과학적 표기법: %e", number);
System.out.println(formatted); // 출력: 과학적 표기법: 1.234568e+04
플래그
플래그는 형식 지정자의 동작을 수정하는 데 추가할 수 있는 선택적 요소입니다. 플래그는 % 문자 바로 뒤에 포맷 지정자 앞에 배치됩니다.
-
- (플러스 기호): 이 플래그는 숫자 값에 양수 일지라도 부호(+ 또는 -)를 포함하도록 강제합니다.
int positiveNumber = 42;
int negativeNumber = -42;
String formatted = String.format("양수: %+d, 음수: %+d", positiveNumber, negativeNumber);
System.out.println(formatted); // 출력: 양수: +42, 음수: -42
- 0 (제로 패딩): 이 플래그는 숫자를 공백 대신 제로로 채웁니다. 일정한 너비를 갖도록 숫자를 사용하는 데 자주 사용됩니다.
int number = 7;
String formatted = String.format("%04d", number);
System.out.println(formatted); // 출력: 0007
- , (쉼표): 이 플래그는 숫자에 그룹화 구분자(쉼표)를 추가하여 큰 숫자를 가독성 있게 포맷하는 데 유용합니다.
int largeNumber = 1000000;
String formatted = String.format("%,d", largeNumber);
System.out.println(formatted); // 출력: 1,000,000
-
- (왼쪽 정렬): 이 플래그는 출력을 지정된 너비 내에서 왼쪽으로 정렬하며 필요한 경우 오른쪽에 공백으로 채웁니다.
String word = "Java";
String formatted = String.format("%-10s is cool.", word);
System.out.println(formatted); // 출력: Java is cool.
너비
너비는 출력에 쓰여야 하는 최소 글자 수를 지정합니다. 인수의 문자열 표현이 너비보다 짧으면 공백(또는 제로 플래그가 사용된 경우 0)으로 채워집니다.
- 최소 너비: 너비를 지정함으로써 출력이 적어도 해당 많은 글자를 차지하도록합니다.
int value = 42;
String formatted = String.format("%5d", value);
System.out.println(formatted); // 출력: " 42"
이 예제에서는 정수 42가 총 다섯 글자를 차지하도록 세 칸의 공백으로 패딩되었습니다.
정밀도
정밀도는 부동 소수점 숫자의 소수점 이하 자릿수를 제어하거나 문자열에서 사용할 최대 글자 수를 제어하는 데 사용됩니다.
- 부동 소수점 정밀도: 소수점 이하에 표시되는 자릿수를 제어합니다.
double pi = 3.141592653589793;
String formatted = String.format("%.4f", pi);
System.out.println(formatted); // 출력: 3.1416
여기서 소수점 이하 4자리까지 표시되는 것을 의미합니다.
- 문자열 정밀도: 이는 문자열에서 가져온 문자의 수를 제한합니다.
String text = "Hello, World!";
String formatted = String.format("%.5s", text);
System.out.println(formatted); // 출력: Hello
여기서는 문자열의 처음 다섯 글자만 출력됩니다.
인수 색인
어떤 경우에는 형식 문자열 내에서 다른 위치에서 인수를 재사용하고 싶을 수 있습니다. 인수 색인을 사용하면 특정 위치에서 어떤 인수를 사용해야 하는지 지정할 수 있습니다.
- 인수 색인: 이는 형식 지정자 앞에 숫자와 $ 기호를 넣어 나타냅니다.
String name = "Kaitlyn";
int age = 30;
String formatted = String.format("%2$s is %1$d years old.", age, name);
System.out.println(formatted); // Output: Kaitlyn is 30 years old.
이 예시에서 2$는 두 번째 인자인 이름이 먼저 사용되어야 함을 나타내고, 1$은 첫 번째 인자인 나이가 두 번째로 사용되어야 함을 나타냅니다.
플래그, 너비, 정밀도 결합
이러한 요소들을 결합하여 출력을 정확하게 제어하는 복잡한 형식 지정자를 만들 수 있습니다.
double balance = 12345.6789;
String formatted = String.format("Balance: $%,.2f", balance);
System.out.println(formatted); // Output: Balance: $12,345.68
이 예제에서 %,.2f는 쉼표 플래그, 정밀도 및 f 서식 지정자의 조합으로, 잘 서식이 지정된 통화 값이 생성됩니다.
String.format()의 실용적인 예제
String.format() 메서드의 다양성은 다양한 데이터 유형 및 서식 지정 요구 사항을 처리할 수 있는 능력을 드러냅니다. 이 섹션에서는 숫자, 날짜 형식화 및 구조화된 보고서 작성을 포함한 다양한 시나리오에 대해 String.format()을 효과적으로 사용하는 방법을 보여주는 여러 실용적인 예제를 탐색하겠습니다.
숫자 형식 지정
String.format()의 가장 일반적인 사용 사례 중 하나는 숫자를 다양한 방식으로 형식화하는 것입니다. 숫자 출력을 특정 형식으로 제시해야 하는 애플리케이션에서 특히 유용합니다.
- 선행 제로로 형식화: 숫자 식별자를 표시할 때, 일정한 너비를 유지하기 위해 숫자를 선행 제로로 채우는 것이 종종 필요합니다.
int productId = 7;
String formatted = String.format("제품 ID: %05d", productId);
System.out.println(formatted); // 출력: 제품 ID: 00007
여기서 %05d는 정수가 총 다섯 글자 너비로 0으로 채워지도록합니다.
- 백분율 형식: 일부 상황에서는 숫자를 백분율로 표시해야 할 수도 있습니다. String.format() 메서드를 사용하면 백분율 기호를 쉽게 추가하고 소수점 이하 자릿수를 제어할 수 있습니다.
double successRate = 0.9235;
String formatted = String.format("성공률: %.2f%%", successRate * 100);
System.out.println(formatted); // 출력: 성공률: 92.35%
%.2f 서식 지정자는 소수점 이하 두 자리로 숫자를 포맷하고 그 뒤에 백분율 기호가 옵니다.
- 큰 숫자 형식 지정: 대규모 숫자를 다룰 때, 천 단위 구분 기호로 쉼표를 추가하면 가독성이 크게 향상됩니다.
long population = 7834000000L;
String formatted = String.format("세계 인구: %,d", population);
System.out.println(formatted); // 출력: 세계 인구: 7,834,000,000
%,d 서식 지정자는 숫자에 쉼표를 추가하여 읽기 쉽게 만듭니다.
날짜 형식 지정
날짜 형식을 포맷하는 데 String.format()이 뛰어난 기능을 발휘하는 또 다른 영역은 요구 사항에 따라 다양한 날짜 및 시간 형식을 허용한다는 점입니다.
- ISO 형식으로 날짜 표시: ISO 형식(YYYY-MM-DD)은 많은 응용 프로그램에서 날짜를 나타내는 표준 방법입니다.
LocalDate date = LocalDate.of(2024, 8, 11);
String formatted = String.format("Date: %tF", date);
System.out.println(formatted); // 출력: Date: 2024-08-11
%tF 지정자는 날짜를 ISO 8601 형식인 yyyy-MM-dd로 포맷합니다.
- 24시간 형식으로 시간 표시: 24시간 형식으로 시간을 표시해야 하는 애플리케이션에는 String.format()을 사용하면 간편하게 처리할 수 있습니다.
LocalTime time = LocalTime.of(14, 30, 45);
String formatted = String.format("시간: %tT", time);
System.out.println(formatted); // 결과: 시간: 14:30:45
위 예시에서 %tT 서식 지정자는 시간을 HH:mm:ss 형식으로 포맷합니다. 여기서 HH는 24시간 형식의 시간을 나타냅니다.
- 사용자 정의 날짜 및 시간 형식: 날짜와 시간을 사용자 정의 형식으로 결합하는 것은 여러 개의 형식 지정자를 사용하여 쉽게 수행할 수 있습니다.
LocalDateTime dateTime = LocalDateTime.of(2024, 8, 11, 14, 30, 45);
String formatted = String.format("이벤트 날짜와 시간: %1$tY년 %1$tm월 %1$td일 %1$tI시 %1$tM분 %1$tp", dateTime);
System.out.println(formatted); // 출력: 이벤트 날짜와 시간: 2024년 08월 11일 02시 30분 오후
이 예시는 동일한 인수를 여러 번 참조하기 위해 %1$를 사용하여 날짜와 시간의 복잡한 형식을 만드는 방법을 보여줍니다.
구조화된 보고서 생성하기
String.format()은 또한 보고서나 로그와 같은 구조화된 텍스트 출력을 생성하는 데 중요한 역할을 할 수 있습니다. 다양한 형식 지정자를 결합함으로써 명확하고 일관된 구조를 만들 수 있습니다.
- 탭ular 레포트 생성: 간단한 레포트를 생성해야 할 때를 상상해봅시다. 다양한 아이템과 가격을 나타내는 간단한 보고서를 생성해야 하는 경우입니다.
String item1 = "노트북";
double price1 = 999.99;
String item2 = "모니터";
double price2 = 199.49;
String item3 = "키보드";
double price3 = 49.99;
String report = String.format(
"%-10s %10s%n%-10s %10.2f%n%-10s %10.2f%n%-10s %10.2f%n",
"아이템", "가격",
item1, price1,
item2, price2,
item3, price3
);
System.out.println(report);
Output:
아이템 가격
노트북 999.99
모니터 199.49
키보드 49.99
이 예제에서 %-10s 서식 지정자는 항목 이름을 10자 필드 내에서 왼쪽 정렬하고, %10.2f는 가격을 10자 필드 내에서 오른쪽 정렬하여 소수점 둘째 자리까지 표시합니다.
- 로그 항목 생성: 로깅이 필요한 애플리케이션의 경우 String.format()을 사용하여 일관된 형식의 로그 항목을 생성할 수 있습니다.
String logLevel = "INFO";
String message = "시스템 시작이 완료되었습니다.";
LocalDateTime timestamp = LocalDateTime.now();
String logEntry = String.format("[%1$tF %1$tT] [%2$s] %3$s", timestamp, logLevel, message);
System.out.println(logEntry);
출력:
[2024-08-15 14:30:45] [INFO] System startup complete.
이 로그 항목 형식에는 타임스탬프, 로그 레벨 및 메시지가 모두 명확하고 일관된 방식으로 포맷되어 있습니다.
- 금융 데이터 처리: 금융 응용 프로그램은 특히 금액 값 처리 시에는 정확한 포맷팅이 필요합니다.
double revenue = 1250349.75;
double expenses = 987654.32;
double profit = revenue - expenses;
String financialReport = String.format(
"Revenue: $%,.2f%nExpenses: $%,.2f%nProfit: $%,.2f",
revenue, expenses, profit
);
System.out.println(financialReport);
출력:
수익: $1,250,349.75
지출: $987,654.32
이익: $262,695.43
이 예시는 String.format()을 사용하여 금융 수치를 형식화하는 방법을 보여줍니다. 쉼표를 추가하고 소수점 자릿수를 제어할 수 있습니다.
결론
자바의 String.format() 메소드는 동적이고 잘 형식화된 문자열을 만드는 프로세스를 간소화하는 유연한 도구입니다. 숫자, 날짜를 형식화하거나 복잡한 보고서를 작성할 때, String.format()은 강력하고 유연한 방법을 제공하여 문자열 조작 요구 사항을 처리할 수 있습니다. 형식 지정자를 정확히 이해하고 활용함으로써, 여러분의 애플리케이션에서 다양한 형식 요구 사항을 충족하는 명확하고 가독성 좋은 유지보수 가능한 코드를 생성할 수 있습니다.
- 자바의 형식 지정자
- 자바 날짜와 시간 API
읽어 주셔서 감사합니다! 본 문서가 도움이 되었다면 하이라이팅, 클랩, 응답 또는 트위터/X를 통해 연락하는 것을 고려해 주시면 매우 감사하며, 이렇게 유지되는 무료 컨텐츠에 도움이 됩니다!