Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java NumberFormat 클래스 완벽 정리 – 로케일별 숫자 형식화와 파싱

NumberFormat은 어떤 로케일(locale)에서도 숫자를 형식화(format)하고 파싱(parse)할 수 있도록 지원하는 Java의 핵심 클래스입니다. 모든 숫자 형식 클래스의 추상 기반 클래스(abstract base class)이며, 국가별로 다른 숫자·통화·퍼센트 표기를 손쉽게 처리할 수 있습니다.

NumberFormat 클래스의 주요 메서드

NumberFormat 클래스에서 자주 사용되는 메서드는 다음과 같습니다.

반환 타입메서드 및 설명
Objectclone()
Cloneable을 재정의하여 객체 복제를 지원합니다.
booleanequals(Object obj)
equals 메서드를 재정의한 것입니다.
Stringformat(double number)
format 메서드의 특수화 버전으로, double 값을 문자열로 변환합니다.
abstract StringBufferformat(double number, StringBuffer toAppendTo, FieldPosition pos)
format 메서드의 추상 특수화 버전입니다.
Stringformat(long number)
format 메서드의 특수화 버전으로, long 값을 문자열로 변환합니다.
abstract StringBufferformat(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() 같은 팩토리 메서드를 적극적으로 활용하면 코드의 가독성과 유지보수성이 크게 향상됩니다.