사실 지금까지 정수면 int, 큰 정수면 long, 소수면 double만 썼었는데 공부하다보니 그 외의 숫자 타입들은 언제 어떻게 사용되는지를 잘 모르고 있었다는 걸 깨달았다. 그래서 해당 내용을 정리해봤다.
- 메모리 효율 + 범위 정확성 + 처리 속도 최적화를 위해
| 타입 | 크기 | 표현 범위 | 기본값 | 특징 |
| byte | 1바이트 (8bit) | -128 ~ 127 | 0 | 작은 데이터, 파일 I/O, 네트워크 패킷 |
| short | 2바이트 | -32,768 ~ 32,767 | 0 | 중간 크기 정수 (옛날 시스템용) |
| int | 4바이트 | ±21억 | 0 | ✅ 가장 일반적인 정수 타입 |
| long | 8바이트 | ±9경 (2⁶³) | 0L | 큰 숫자 (시간, ID 등) |
| float | 4바이트 | 소수점 이하 7자리 | 0.0f | 정밀도 낮은 실수 (그래픽, 게임 등) |
| double | 8바이트 | 소수점 이하 15자리 | 0.0d | ✅ 일반적인 실수 타입 (계산용) |
| 아주 작은 수, 메모리 제한 | byte / short | 이미지, 바이너리, 통신 프로토콜 등 |
| 대부분의 정수 연산 | ✅ int | 성능/표현 범위 밸런스가 좋아서 기본형 |
| 아주 큰 숫자 (id, 밀리초 시간 등) | long | 10자리 이상 숫자 표현 필요할 때 (System.currentTimeMillis()) |
| 과학적 계산, 금융, 일반적인 소수 | ✅ double | 정밀도 높고 기본 실수형 |
| 그래픽, 게임, 메모리 민감 | float | 메모리 절약, 속도 빠름 (단 정밀도 낮음) |
| 나이, 수량, 카운트 | int | 범위 충분 + 기본형 |
| 게시글 ID, 사용자 ID | long | 전 세계 서비스면 수십억 건 가능성 대비 |
| 이미지 픽셀, 음성 데이터 | byte | 메모리 절약 |
| 지구 중력 가속도 9.8 | double | 정밀 실수 |
| 3D 게임 캐릭터 위치 좌표 | float | 성능 + 메모리 절약 |
float f = 0.1f;
double d = 0.1;
System.out.println(f == d); // ❌ false (정밀도 차이)
→ 항상 정밀한 계산이 필요한 경우 double 사용
✔ 웬만한 경우엔 맞지만,
⛔ 대량 데이터 처리, 디바이스 프로그래밍, 수학적 정확성, 성능 최적화 상황에선
"가볍고 정확한 타입 선택"이 중요
상황 추천 타입 이유
| 거의 모든 정수 | int | 기본형 + 범위 넉넉 |
| 아주 큰 정수 | long | ID, 시간 표현 등 |
| 소수점 계산 | double | 정밀도 ↑ |
| 가볍고 빠른 계산 | float, byte, short | 메모리/성능 최적화 |
| 정확한 타입 설계 | 필요에 따라 사용 | 과하거나 부족하지 않게 설계 |