자바에서 실수를 표현하는 기본적인 방법은 원시 타입인 `float`와 `double` 두 가지이다.
1) float vs. double
`float`
- 크기 : 4 Byte
- 정밀도 : 소수점 이하 약 7자리
- 표현 범위 : 비교적 좁음
- 사용 : 메모리 절약이 중요하거나 정밀도가 크게 필요하지 않을 때
- 주의 : `float` 리터럴 숫자 뒤엔 `f` 또는 `F`를 붙여야 한다.
`double`
- 크기 : 8 Byte
- 정밀도 : 소수점 이하 약 15자리
- 표현 범위 : 매우 넓음
- 사용 : 자바에서 실수를 다루는 기본 타입이나. 특별한 이유가 없다면 `double`을 사용한다.
- 주의 : 실수 리터럴은 기본적으로 `double`로 간주한다.
2) double vs. Double
이 둘은 같은 값을 다루지만, 메모리 위치와 특징이 근본적으로 다르다.
| 특징 | double | Double |
| 타입 | 원시 타입 | 참조 타입 |
| 메모리 | 스택 영역에 값 저장 | 스택에 주소, 힙에 객체 저장 |
| NULL 허용 | 불가능 | 가능 |
| 용도 | 단순 연산, 성능 중시 | 컬렉션 저장, 제네릭 타입, 객체 지향 메서드 사용 |
Double은 객체이므로 ArrayList<Double> 처럼 컬렉션에 넣거나, null 처리가 필요할 때 사용한다. 단순 연산에서는 성능이 더 좋은 double을 사용한다.
3) Java의 Decimal 연산
일반적인 부동 소수점 (float, double) 연산은 정밀한 계산에 적합하지 않다.
-> 자바의 정밀 연산 타입 : `BigDecimal`
- 자바에서는 decimal이라는 원시 타입이 없으며, `java.math.BigDecimal` 클래스를 사용하여 오차 없이 정확한 10진수 연산을 수행한다.
- 사용 : 금융, 회계, 화폐 계산 등 정밀도가 100% 보장되어야 하는 모든 분야에서 사용된다.
- 주의 : `BigDecimal`은 객체이며, 일반적인 연산자(`+`, `-`, `*`, `/`) 가 아닌 클래스 메서드(`.add()`, `.substract()`)를 통해 연산해야 한다.
- 단점 : 일반 `double`보다 성능이 느리다.
'Java' 카테고리의 다른 글
| [Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수) (0) | 2025.11.10 |
|---|---|
| [Java] 원시타입(Primitive Type)과 참조타입(Reference Type) (0) | 2025.10.14 |
| [Java] 스트림(Stream)에 대하여 (0) | 2025.10.14 |
| [Java] POJO(Plain Old Java Object) (0) | 2025.09.16 |
| [Java] 객체지향설계의 5가지 원칙 (SOLID 원칙) (2) | 2025.08.03 |
