NumberFormat은 어떤 로케일(locale)에서도 숫자를 형식화(format)하고 파싱(parse)할 수 있도록 지원하는 Java의 핵심 클래스입니다. 모든 숫자 형식 클래스의 추상 기반 클래스(abstract base class)이며, 국가별로 다른 숫자·통화·퍼센트 표기를 손쉽게 처리할 수 있습니다.
NumberFormat 클래스의 주요 메서드
NumberFormat 클래스에서 자주 사용되는 메서드는 다음과 같습니다.
| 반환 타입 | 메서드 및 설명 |
|---|---|
| Object | clone() Cloneable을 재정의하여 객체 복제를 지원합니다. |
| boolean | equals(Object obj) equals 메서드를 재정의한 것입니다. |
| String | format(double number) format 메서드의 특수화 버전으로, double 값을 문자열로 변환합니다. |
| abstract StringBuffer | format(double number, StringBuffer toAppendTo, FieldPosition pos) format 메서드의 추상 특수화 버전입니다. |
| String | format(long number) format 메서드의 특수화 버전으로, long 값을 문자열로 변환합니다. |
| abstract StringBuffer | format(long number, StringBuffer toAppendTo, FieldPosition pos) format 메서드의 추상 특수화 버전입니다. |
예제 1: 통화 형식으로 출력하기
다음은 NumberFormat 클래스를 활용해 프랑스 로케일의 통화 형식으로 숫자를 출력하는 예제입니다.
import java.text.NumberFormat;
import java.util.Locale;
public class Demo {
public static void main(String[] args) {
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.FRANCE);
double points = 2.15;
double totalPoints = points * 1000;
System.out.println(n.format(points));
System.out.println(n.format(totalPoints));
}
}출력 결과
위 코드를 실행하면 다음과 같이 유럽식 통화 표기(소수점 대신 쉼표, 천 단위 구분자로 공백 사용)로 출력됩니다.
2,15 € 2 150,00 €
예제 2: 로케일별 숫자 표기 차이 확인하기
이번에는 서로 다른 로케일(덴마크, 미국)에서 동일한 숫자가 어떻게 다르게 표시되는지 확인해 보겠습니다.
import java.text.NumberFormat;
import java.util.Locale;
public class Demo {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}출력 결과
덴마크 로케일에서는 소수점 구분자로 쉼표를, 미국 로케일에서는 마침표를 사용하는 차이를 확인할 수 있습니다.
100,76 100.76
정리
NumberFormat 클래스를 사용하면 로케일에 맞는 숫자, 통화, 퍼센트 형식을 일관되게 처리할 수 있습니다. 특히 다국어 서비스나 국제 결제 시스템을 개발할 때 getCurrencyInstance(), getInstance() 같은 팩토리 메서드를 적극적으로 활용하면 코드의 가독성과 유지보수성이 크게 향상됩니다.