8P by neo 2달전 | favorite | 댓글 1개
  • 화폐 금액 조작은 일반적인 컴퓨팅 작업이지만, 주류 프로그래밍 언어에는 금액을 표현하는 기본 데이터 타입이 없음
  • 이는 할부 결제, 외환 거래, 수수료 처리 및 세금 징수와 같은 작업에서 반올림 문제를 일으킬 수 있음
  • Money 는 금액 계산과 할당을 쉽게 할 수 있도록 돕는 Kotlin 라이브러리
    • 금액의 수학적 연산, 퍼센트 계산, 할당을 지원하여 다양한 사용 사례를 모델링할 수 있음
    • 암호화폐도 기본적으로 지원함
  • 할당 기능
    • 라이브러리의 가장 큰 장점 중 하나는 할당 기능임
    • 금액을 여러 부분으로 나누면서 원래 금액과 동일하게 보장함
    • 예를 들어, 고객이 USD 100.00의 구매를 세 번의 할부로 결제할 때, 반올림 문제로 인한 손실을 방지할 수 있음
  • 할당 방법
    • allocate() 메서드를 사용하여 원래 금액과 차이가 없도록 결과를 보장함.
    • 비율에 따라 할당하려면 Percentage 값을 리스트로 전달함.
    • 기본적으로 라이브러리는 차이를 자동으로 할당하지만, 원하는 할당 전략으로 조정 가능함.
  • 마무리
    • 이 글은 라이브러리의 기능을 간단히 소개한 것임.
    • API를 간결하게 유지하고 안드로이드 개발 지원 및 지속성과 직렬화 기능을 점진적으로 확장할 계획임.
    • 현재 버전이 Kotlin 프로젝트에서 금액을 조작하는 사람들에게 유용하기를 바람.

GN⁺의 정리

  • 금액을 다루는 것은 프로그래밍에서 흔한 작업이지만, 반올림 문제로 인해 복잡해질 수 있음.
  • Money 라이브러리는 이러한 문제를 해결하기 위해 설계된 Kotlin 라이브러리로, 금액의 정확한 할당과 계산을 지원함.
  • 이 라이브러리는 306개의 통화와 2283개의 암호화폐를 지원하며, Kotlin 프로젝트에서 금액을 다루는 데 유용함.
  • 비슷한 기능을 가진 다른 프로젝트로는 Java의 Joda-Money 라이브러리 등이 있음.
Hacker News 의견
  • infix 함수 사용이 약간 이상하게 느껴짐

    • Kotlin에서 API를 설계할 때, 일반적인 확장 함수나 확장 속성을 사용할 것 같음
    • "increaseBy"와 "decreaseBy" 대신 plusminus를 오버로딩하지 않은 이유가 궁금함
  • 라이브러리 축하와 공유에 감사함

    • F#이나 C#의 단위 시스템이 금전 계산과 유사할 수 있음
    • Rust에서 정확성에 중점을 둔 백테스터를 개발 중이며, 자산이 통화로 평가됨
    • 시뮬레이션 시 거래소가 항상 작동한다고 가정할 수 있는지 궁금함
    • 환율에 대한 공공 데이터가 있는지 궁금함
    • 거래 시 어떤 환율을 선택해야 하는지 궁금함
    • 반올림에 대한 최선의 방법이 있는지 궁금함
    • 세금을 즉시 공제하는 것이 좋은지 궁금함
    • 인플레이션을 모델링할지 고민 중이며, 현재는 무시하고 마지막에 조정할 계획임
  • Rebol의 금전 타입의 사용성을 떠올리게 함

    • Rebol의 타입 시스템이 매우 표현력이 있었음
    • 이런 경험을 제공하는 라이브러리가 더 많아지길 바람
  • 금전 처리 시 발생하는 엣지 케이스에 대한 질문

    • 서로 다른 통화의 값을 더할 때 런타임 예외가 발생할 것으로 기대함
    • $2.00을 3으로 나눌 때 반올림 규칙을 지정할 수 있는지 궁금함
    • 사용자 입력을 파싱할 때 추가 자릿수에 대한 처리가 궁금함
    • 자릿수 규칙을 벗어나는 경우에 대한 라이브러리의 처리 방법이 궁금함
  • 사용자 정의 통화 지원을 좋아함

    • 통화 기호가 지역에 따라 다르므로 주의가 필요함
    • CLDR 데이터셋이 통화 표시를 다루는 대부분의 구현에 사용됨
  • 스프레드시트 언어가 금전을 잘 지원하지 않는 것이 이상함

    • 스프레드시트를 사용한 자동화가 좋으며, 타입을 진지하게 다루는 언어에서 놀라운 결과를 얻을 수 있음
  • C#의 decimal 타입이 금전 계산에 적합함

  • 댓글에서 많은 것을 배웠으며, 라이브러리의 다음 반복에 도움이 될 것임

  • 라이브러리보다 모든 엣지 케이스를 다루는 철저한 테스트 스위트를 원함

    • 엄격한 타입 사용에 대한 생각이 있음
    • 많은 저수준 프로그래밍 언어가 여전히 uint64, size_t 등을 사용하는 것이 이상하게 느껴짐
  • 요구 사항을 모두 충족하는 것 같으며, 금전 처리의 주요 어려움에 대한 좋은 논의가 있음