본문 바로가기

Programing/JVM(Java, Kotlin)

[Java] 통화 표준 및 통화코드 그리고 Currency 클래스

결제 관련 개발을 하면서 410이라는 코드를 많이 접하게 되었다.

비단 한 PG 뿐만 아니라 광범위하게 사용되고 있음을 알게 되었다.

 

간단한 구글링으로 410 이라는 코드는 ISO 4217에 있는 숫자형태의 통화 코드라는 것을 알게 되었다.

ISO 표준문서는 돈내야 열람 가능하지만 테이블 형태는 그냥 조회가 된다.

Current currency & funds code list

list_one.xls
0.09MB
Current currency & funds code list

Currency 클래스에는 통화 관련 정보를 조회하는 로직과 구조이지 실제 데이터는 lib 디렉터리 하위에 currency.data 라는 바이너리 파일에 저장되어 있다. JDK 1.8이 설치되어 있는 mac OS의 경우는 아래 디렉토리에 있다.

/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/currency.data

재미있는 것은 이 파일의 매직넘버(파일을 식별하기 위한 헤더에 위치하는 임의의 데이터)가 "CurD"이다.

public final class Currency implements Serializable {
    // ...
    // handy constants - must match definitions in GenerateCurrencyData
    // magic number
    private static final int MAGIC_NUMBER = 0x43757244;

인스턴스를 얻으려면 로케일이 필요하다.

Currency currencyKo = Currency.getInstance(Locale.KOREA)

getCurrencyCode 나 getNumericCode 메서드를 통해 통화코드나 숫자형 코드를 얻을 수 있다.

def "Locale 기반 Currency 획득 테스트"() {
    when:
    def cut = Currency.getInstance(Locale.KOREA)

    then:
    cut.getCurrencyCode() == "KRW"
    cut.getNumericCode() == 410
}