이번 커머스 과제를 수행하면서 알게된 String.format의 개념에 대해서 정리하고 넘어가고자 한다.
String.format 이란 ?
→ String.format()은 문자열을 원하는 형식(format)에 맞춰서 생성할 때 사용하는 메서드
1. 기본 문법
String result = String.format("포맷 문자열", 값1, 값2, ...);
- "포맷 문자열" : % 기호와 함께 자리 표시자를 넣음
- 값들은 순서대로 자리 표시자에 매핑됨
- 최종적으로 새로운 문자열을 반환
2. 주요 포맷 지정자
| 포맷 지정자 | 의미 | 예시 |
| %d | 정수 | String.format("%d", 10) → "10" |
| %f | 실수 (기본 소수점 6자리) | String.format("%f", 3.14) → "3.140000" |
| %.nf | 소수점 n자리까지 | String.format("%.2f", 3.14159) → "3.14" |
| %s | 문자열 | String.format("%s", "Hello") → "Hello" |
| %c | 문자 | String.format("%c", 'A') → "A" |
| %b | boolean | String.format("%b", true) → "true" |
| %o | 8진수 | String.format("%o", 10) → "12" |
| %x | 16진수 (소문자) | String.format("%x", 255) → "ff" |
| %X | 16진수 (대문자) | String.format("%X", 255) → "FF" |
3. 포맷 옵션(정렬, 폭, 패딩)
| 옵션 | 의미 | 예시 |
| %5d | 5자리 폭 확보 (오른쪽 정렬) | String.format("%5d", 42) → " 42" |
| %-5d | 5자리 폭 확보 (왼쪽 정렬) | String.format("%-5d", 42) → "42 " |
| %05d | 빈칸을 0으로 채움 | String.format("%05d", 42) → "00042" |
| %10s | 문자열 폭 맞춤 | String.format("%10s", "Hi") → " Hi" |
4. 예제 코드
실제로 String.format을 사용한 예제를 통해 어떤 결과를 나타내는지 알아보자
public class Main {
public static void main(String[] args) {
String name = "하마";
int age = 28;
double score = 95.5678;
// 기본 문자열 조합
String result1 = String.format("이름: %s, 나이: %d", name, age);
System.out.println(result1);
// → 이름: 하마, 나이: 28
// 소수점 제한
String result2 = String.format("점수: %.2f", score);
System.out.println(result2);
// → 점수: 95.57
// 정렬 및 패딩
String result3 = String.format("번호: %05d", 7);
System.out.println(result3);
// → 번호: 00007
}
}
4. printf와의 차이점
- System.out.printf() : 출력만 하고 반환값 없음
- String.format() : 문자열을 생성해서 반환 → 나중에 다른 문자열과 합치거나 변수에 저장할 수 있음
5. 플래그(Flags)
- C언어의 포맷팅 문법 중 플래그(flag)라고 사용되던 개념을 확장하여 적용함
| 플래그 | 의미 | 예시 |
| - | 왼쪽 정렬 | String.format("%-5d", 42) → 42 |
| 0 | 빈칸을 0으로 채움 | String.format("%05d", 42) → 00042 |
| , | 천 단위 구분 | String.format("%,d", 1234567) → 1,234,567 |
| + | 항상 부호 표시 | String.format("%+d", 42) → +42 |
| ( | 음수를 괄호로 표시 | String.format("%(d", -42) → (42) |
| # | 특수 기호 추가 (진수 표현 등) | String.format("%#x", 255) → 0xff |
이를 통해 포맷 지정자, 포맷 옵션, 플래그를 적절히 잘 활용하면 사람이 읽기 좋은 가독성 높은 출력 화면을 이끌어 낼 수 있음!
쉽게 예시를 통해 비교해보면서 마무리해보자!
- As is
System.out.println("1 Galaxy S25 1200000 최신 안드로이드 스마트폰");
System.out.println("2 iPhone16 1350000 Apple의 최신 스마트폰");
→ 숫자와 글자가 붙어 있어 가독성이 떨어짐
- To be
System.out.println(String.format("%-2d %-15s | %,10d원 | %s",
1, "Galaxy S25", 1200000, "최신 안드로이드 스마트폰"));
System.out.println(String.format("%-2d %-15s | %,10d원 | %s",
2, "iPhone 16", 1350000, "Apple의 최신 스마트폰"));
- 결과창
1 Galaxy S25 | 1,200,000원 | 최신 안드로이드 스마트폰
2 iPhone 16 | 1,350,000원 | Apple의 최신 스마트폰
→ 깔끔하게 정렬되고, 금액에는 자릿수 표현, 설명은 일정 간격 뒤에 나와 구분자가 보다 깔끔한 화면을 나타나게 함
'JAVA' 카테고리의 다른 글
| [JAVA] 알고리즘 기본 정리 (0) | 2025.09.29 |
|---|---|
| [JAVA] 배열 개념 확장 정리 (1) | 2025.09.25 |
| [JAVA] JAVA의 For문에 대해 (0) | 2025.09.23 |
| [JAVA] 객체 지향 프로그래밍 개념 정리 (OOP) (0) | 2025.09.19 |
| [JAVA] JSP vs Thymleaf 개념 더 알아보기 (0) | 2025.09.19 |