자바 기본 타입(Primitive Type) 정리
자바 기본 타입(Primitive Type)은 데이터가 메모리에 저장·처리되는 가장 낮은 단위를 정의합니다. 총 8가지(정수·실수·문자·논리형)로 구분되며, 자바 프로그램의 성능·메모리 사용량을 좌우하기 때문에 반드시 이해하셔야 합니다.
정수형: byte·short·int·long
자바 기본 타입 중 정수형은 부호가 있는 소수점 없는 값을 담습니다. 메모리 크기가 작을수록 범위가 좁으나, 캐싱·네트워크 패킷 등에서는 작은 타입이 유리합니다.
| 타입 | 메모리 | 최소값 | 최대값 |
|---|---|---|---|
byte |
1바이트 | −128 | 127 |
short |
2바이트 | −32 768 | 32 767 |
int |
4바이트 | −2 147 483 648 | 2 147 483 647 |
long |
8바이트 | −9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
오버플로우·언더플로우 주의
타입 범위를 벗어나면 값이 반전되어 예상치 못한 버그가 발생합니다.
public class OverflowDemo {
public static void main(String[] args) {
byte max = 127;
byte min = -128;
max++; // 127 → -128 (Overflow)
min--; // -128 → 127 (Underflow)
System.out.println(max); // -128
System.out.println(min); // 127
}
}
팁: 금융·통계처럼 범위가 큰 정수가 필요하면 BigInteger 클래스를 사용해 오버플로우를 방지하세요.
실수형: float·double
실수형은 소수부·지수부를 포함해 더 넓은 범위를 표현합니다.
현재 double이 기본 타입이며, float을 쓰려면 리터럴 끝에 f/F를 붙여야 합니다.
| 타입 | 메모리 | 표현 범위(±) | 유효 자릿수 | 리터럴 예 |
|---|---|---|---|---|
float |
4바이트 | 3.4 × 10⁻³⁸ ~ 3.4 × 10³⁸ | 약 6자리 | 3.14f |
double |
8바이트 | 1.7 × 10⁻³⁰⁸ ~ 1.7 × 10³⁰⁸ | 약 15자리 | 3.14 |
표현 오차
컴퓨터는 2진 부동소수점 방식을 사용해 10진수를 근사합니다. 예를 들어 0.1 + 0.2 != 0.3이 되는 이유가 바로 이 오차입니다.
double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 0.30000000000000004
해결법: 금융 계산에는 BigDecimal을 사용해 정밀도를 확보하세요.
문자형: char와 유니코드
char는 2바이트(16비트)로 하나의 유니코드 문자를 표현합니다.
- 범위:
0~65 535 - 다국어 지원: 한글·이모지까지 포함하는 UTF-16 값을 저장합니다.
char ch = '한';
System.out.printf("%c의 코드포인트: %d%n", ch, (int) ch); // 한의 코드포인트: 54620
참고: 2바이트로는 모든 문자를 표현하기 어려워 서로게이트 페어(4바이트)으로 확장되기도 합니다.
논리형: boolean
boolean은 참(true) 또는 거짓(false) 두 값만 가집니다.
- 메모리: 명세상 1바이트(실제 구현은 JVM마다 상이)
- 용도: 조건문·플래그·비트 연산 결과 등
boolean isAdult = age >= 19;
if (isAdult) {
System.out.println("성인입니다.");
}
기본값: 배열·필드에서 초기화를 생략하면 false로 설정됩니다.
자바 기본 타입 빠른 정리
- 정수형 –
byte,short,int,long - 실수형 –
float,double - 문자형 –
char(유니코드) - 논리형 –
boolean
각 타입은 메모리 효율·연산 속도·오차에 영향을 주므로, 목적에 맞는 선택이 중요합니다.
정리 질문
-
자바 기본 타입 선택 시 기준은 무엇인가요?
값의 최대 범위와 연산 속도를 고려해 가장 작은 타입을 선택하세요. 예를 들어 카운터는
int, 금액은long또는BigDecimal이 적합합니다. -
float와 double 중 어느 것을 써야 하나요?
과거에는 메모리 절약을 위해
float을 썼지만, 현대 JVM과 하드웨어는double연산을 최적화하므로 double이 기본입니다. -
char로 이모지를 저장할 수 있나요?
일부 이모지는 서로게이트 페어(4바이트)로 인코딩되므로
char두 개가 필요합니다. 문자열 API로 다루면 자동 처리됩니다. -
boolean 배열이 1바이트만 차지하나요?
JVM 구현에 따라 1바이트 이상을 할당할 수 있습니다. 대규모 비트 집합에는
BitSet을 사용해 공간을 절약하세요. -
오버플로우를 방지하는 방법은?
연산 전에 범위를 검사하거나
Math.addExact,BigInteger처럼 오버플로우 체크·무한 정수를 제공하는 클래스를 활용하세요.
댓글남기기