| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바개발
- 개발공부
- 코딩인터뷰
- 자료구조
- 알고리즘공부
- 개발자팁
- 가비지컬렉션
- 예외처리
- 자바
- 알고리즘
- 파이썬
- Java
- 정렬
- 자바프로그래밍
- 백준
- 멀티스레드
- 코딩테스트준비
- 코딩공부
- 프로그래밍기초
- 자바공부
- JVM
- 코딩테스트팁
- 프로그래머스
- 자바기초
- HashMap
- 객체지향
- 코딩테스트
- 클린코드
- 개발자취업
- 메모리관리
- Today
- Total
코드 한 줄의 기록
Java 문자열 포맷팅 완벽 가이드: String.format과 Formatter 사용법 소개 본문
Java에서 문자열을 가공하거나 출력할 때 String.format 메서드와 Formatter 클래스를 활용하면 코드 가독성과 유지보수성을 크게 높일 수 있습니다. 본 글에서는 Java 문자열 포맷팅의 핵심 개념을 살펴보고, 실제 예제와 함께 단계별 사용법을 정리합니다. 또한 실무에서 자주 쓰이는 포맷 지정자와 주의사항을 상세히 다루어, 여러분도 쉽게 따라 하실 수 있도록 구성했습니다.
왜 문자열 포맷팅이 필요한가?
프로그래밍 과정에서 숫자, 날짜, 문자열 등을 특정 형식으로 표현해야 할 때가 많습니다.
– SQL 쿼리 생성
– 로그 메시지 출력
– 사용자에게 읽기 좋은 형태로 값 전달
이때 단순 문자열 덧셈(+)으로 처리하면 코드가 지저분해지고, 형식을 바꾸기 어렵습니다.
String.format과 Formatter를 사용하면 포맷 문자열에 자리 표시자를 넣어, 동적으로 값을 결합할 수 있어 유지보수가 편리해집니다.
String.format 기본 사용법
String result = String.format("안녕하세요, %s님! 오늘은 %d월 %02d일입니다.", "홍길동", 10, 1);
System.out.println(result);
// 출력: 안녕하세요, 홍길동님! 오늘은 10월 01일입니다.
%s: 문자열(String)%d: 정수(Integer)%02d: 2자리 정수, 빈칸 대신 0 채움%.2f: 소수점 둘째 자리까지 표시하는 실수(Float/Double)
주요 포맷 지정자
| 지정자 | 설명 |
| %s | 문자열 |
| %d | 10진수 정수 |
| %f | 10진수 실수 (기본 소수점 6자리) |
| %x, %X | 16진수 정수 (소문자, 대문자) |
| %o | 8진수 정수 |
| %c | 단일 문자 |
| %b | 불리언 값 (true/false) |
| %e, %E | 지수 표기법 실수 |
| %t? | 날짜/시간 (자세한 서브 지정자 필요) |
플래그와 폭, 정밀도
-: 왼쪽 정렬+: 부호 표시0: 빈칸 대신 0 채움,: 천 단위 구분자- 숫자 : 최소 폭(width) 지정
.숫자: 정밀도(precision) 지정 (실수 소수점 이하, 문자열 최대 길이 등)
Formatter 클래스 활용
Formatter는 Appendable 인터페이스 기반으로, StringBuilder나 OutputStream 등에 포맷팅 결과를 바로 출력할 때 유용합니다.
Formatter fmt = new Formatter();
fmt.format("이름: %s, 점수: %d점%n", "이지은", 95);
System.out.print(fmt);
fmt.close();
- Formatter 생성 시 Locale 지정 가능
- format(...) 메서드는 printf와 동일한 포맷 지정 규칙을 사용
- close()를 잊지 않도록 주의
Locale 지정 예제
Formatter fmtKR = new Formatter(Locale.KOREA);
fmtKR.format("통화: %,d원", 1234567);
System.out.println(fmtKR);
// 출력: 통화: 1,234,567원
서로 다른 국가별 숫자 포맷이 필요할 때 유용합니다.
printf와의 관계
System.out.printf 메서드는 내부적으로 Formatter를 사용합니다.
System.out.printf("현재 온도: %.1f℃\n", 23.7);
콘솔 출력 시 간편하게 포맷팅할 수 있습니다.
실전 예제
테이블 형태로 출력하기
String[] items = {"사과", "바나나", "체리"};
int[] qty = {3, 5, 2};
double[] price = {1000.0, 500.5, 2000.25};
System.out.printf("%-10s %5s %10s%n", "상품명", "수량", "단가");
for (int i = 0; i < items.length; i++) {
System.out.printf("%-10s %5d %10.2f%n", items[i], qty[i], price[i]);
}
%-10s: 왼쪽 정렬, 폭 10%5d: 폭 5%10.2f: 폭 10, 소수점 둘째 자리
CSV 파일 생성
StringBuilder sb = new StringBuilder();
Formatter csvFmt = new Formatter(sb);
for (int i = 0; i < items.length; i++) {
csvFmt.format("\"%s\",%d,%.2f%n", items[i], qty[i], price[i]);
}
Files.write(Paths.get("data.csv"), sb.toString().getBytes());
csvFmt.close();
CSV처럼 데이터를 인용부호와 쉼표로 묶어 저장할 때도 편리합니다.
성능과 주의사항
- String.format은 내부적으로 Formatter 객체를 매번 생성하므로, 빈번한 호출이 성능 병목이 될 수 있습니다.
- 반복문 안에서 많은 포맷팅이 필요하다면, Formatter 객체를 재사용하거나 StringBuilder + append 조합을 고려하세요.
- 포맷 문자열 오류(
IllegalFormatException) 발생 시 런타임 예외가 발생하므로, 포맷 지정자와 매개변수 타입을 반드시 일치시켜야 합니다.
팁과 트릭
- 정규 표현식과 병용
포맷팅 후 문자열 검증이 필요하다면, 정규 표현식으로 패턴을 체크할 수 있습니다. - 메시지 번역(국제화)
ResourceBundle과 MessageFormat을 함께 사용하면 다국어 지원 메시지를 동적으로 처리할 수 있습니다. - 커스텀 포맷터
Formatter에 사용자 정의 변환기를 등록하여 고유한 객체를 포맷팅할 수 있습니다.
Java의 String.format과 Formatter를 적절히 활용하면 문자열 조합과 출력 로직이 깔끔해지고, 다양한 포맷 요구사항을 코드 한 줄로 처리할 수 있습니다. 성능 이슈를 유의하면서, printf나 MessageFormat과 비교해 자신이 필요한 기능을 선택하시기 바랍니다. 이 가이드를 참고하여 더 읽기 쉽고 유지보수하기 좋은 문자열 포맷팅 코드를 작성해 보세요!
Java 재귀함수 완전정복: 종료조건부터 꼬리재귀까지 실무 개발자가 알려주는 모든 것
재귀함수란 무엇인가?재귀함수는 간단히 말해서 자기 자신을 호출하는 함수입니다. 복잡한 문제를 작은 단위로 나누어 해결하는 분할 정복(Divide and Conquer) 방식의 핵심이죠.public class RecursionExamp
byteandbit.tistory.com
'JAVA' 카테고리의 다른 글
| Java String 불변성과 메모리 최적화: 리터럴 풀과 equals 비교 완벽 가이드 (0) | 2025.10.04 |
|---|---|
| Java 정규표현식(java.util.regex) 기초 완벽 가이드: 초보 개발자를 위한 이해하기 쉬운 학습 노트 (0) | 2025.10.03 |
| Java 재귀함수 완전정복: 종료조건부터 꼬리재귀까지 실무 개발자가 알려주는 모든 것 (0) | 2025.10.01 |
| Java 메서드 완전 정복: 정의부터 오버로딩, 가변인자까지 한 번에 마스터하기 (0) | 2025.09.30 |
| Java 배열(1차원/다차원)과 Arrays 유틸리티 완벽 정리: 초보자부터 실무까지 한 번에! (0) | 2025.09.29 |