F-Lab
🚀
상위권 IT회사 합격 이력서 무료로 모아보기

자바에서의 부동 소수점 오류와 BigDecimal 사용법

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!



부동 소수점 오류의 이해

자바에서 부동 소수점 오류는 주로 float와 double 자료형을 사용할 때 발생합니다. 이는 이진수 체계에서 소수점을 정확하게 표현할 수 없는 경우에 발생하는 오류로, 계산의 정확도를 떨어뜨립니다.

예를 들어, 0.1을 표현하려고 할 때 정확한 표현이 불가능하여 근사값으로 저장되며, 이로 인해 예상치 못한 결과가 발생할 수 있습니다. 이는 금융 계산과 같이 정밀한 계산이 필요한 경우 큰 문제를 일으킬 수 있습니다.

왜냐하면 부동 소수점 수는 이진수 체계에서 소수점 이하의 정확한 표현이 어렵기 때문입니다.



BigDecimal의 소개와 사용 이유

자바에서는 부동 소수점 오류를 해결하기 위해 BigDecimal 클래스를 제공합니다. BigDecimal은 불변의, 임의 정밀도의 소수점 숫자를 표현할 수 있는 클래스로, 정확한 소수점 연산을 지원합니다.

BigDecimal을 사용하면 float나 double을 사용할 때 발생할 수 있는 정밀도 손실 없이 소수점 연산을 수행할 수 있습니다. 따라서 금융 계산과 같이 정밀한 계산이 필요한 애플리케이션에서 널리 사용됩니다.

왜냐하면 BigDecimal은 소수점 연산 시 정밀도 손실을 방지할 수 있기 때문입니다.



BigDecimal 사용법

BigDecimal의 인스턴스는 문자열 또는 숫자를 인자로 받는 생성자를 통해 생성할 수 있습니다. 문자열 생성자를 사용하는 것이 부동 소수점 오류를 방지하는 가장 안전한 방법입니다.

    BigDecimal a = new BigDecimal("0.1");
    BigDecimal b = new BigDecimal("0.2");
    BigDecimal result = a.add(b); // 0.3

BigDecimal은 add, subtract, multiply, divide 등의 메서드를 제공하여 기본적인 산술 연산을 수행할 수 있습니다. 특히, divide 메서드를 사용할 때는 반드시 반올림 모드를 지정해야 합니다.

왜냐하면 BigDecimal은 무한 소수를 표현할 수 있기 때문에, 연산 결과가 무한 소수가 될 경우 반올림 모드를 지정하지 않으면 ArithmeticException이 발생하기 때문입니다.



BigDecimal의 성능 고려사항

BigDecimal은 정밀한 계산을 가능하게 하지만, float나 double에 비해 성능상의 오버헤드가 있습니다. 따라서 성능이 중요한 애플리케이션에서는 사용 전 성능 테스트를 수행하는 것이 좋습니다.

또한, BigDecimal은 불변 객체이므로, 연산을 수행할 때마다 새로운 객체가 생성됩니다. 이는 메모리 사용량이 증가할 수 있으므로, 메모리 관리에도 주의가 필요합니다.

왜냐하면 BigDecimal 연산은 내부적으로 복잡한 처리를 수행하기 때문에, float나 double 연산에 비해 상대적으로 느릴 수 있기 때문입니다.



결론

자바에서 부동 소수점 오류는 정밀한 계산이 필요한 애플리케이션에서 큰 문제를 일으킬 수 있습니다. 이를 해결하기 위해 BigDecimal 클래스를 사용할 수 있으며, 이를 통해 정밀한 소수점 연산을 수행할 수 있습니다.

하지만, BigDecimal 사용 시 성능과 메모리 사용량을 고려해야 하며, 애플리케이션의 요구 사항에 맞게 적절히 사용하는 것이 중요합니다.

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수
F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 종로구 돈화문로88-1, 3층 301호 | copyright © F-Lab & Company 2025