2 분 소요

자바 기본 타입(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와 유니코드

char2바이트(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로 설정됩니다.


자바 기본 타입 빠른 정리

  1. 정수형byte, short, int, long
  2. 실수형float, double
  3. 문자형char (유니코드)
  4. 논리형boolean

각 타입은 메모리 효율·연산 속도·오차에 영향을 주므로, 목적에 맞는 선택이 중요합니다.


정리 질문

  1. 자바 기본 타입 선택 시 기준은 무엇인가요?

    값의 최대 범위연산 속도를 고려해 가장 작은 타입을 선택하세요. 예를 들어 카운터는 int, 금액은 long 또는 BigDecimal이 적합합니다.

  2. float와 double 중 어느 것을 써야 하나요?

    과거에는 메모리 절약을 위해 float을 썼지만, 현대 JVM과 하드웨어는 double 연산을 최적화하므로 double이 기본입니다.

  3. char로 이모지를 저장할 수 있나요?

    일부 이모지는 서로게이트 페어(4바이트)로 인코딩되므로 char 두 개가 필요합니다. 문자열 API로 다루면 자동 처리됩니다.

  4. boolean 배열이 1바이트만 차지하나요?

    JVM 구현에 따라 1바이트 이상을 할당할 수 있습니다. 대규모 비트 집합에는 BitSet을 사용해 공간을 절약하세요.

  5. 오버플로우를 방지하는 방법은?

    연산 전에 범위를 검사하거나 Math.addExact, BigInteger처럼 오버플로우 체크·무한 정수를 제공하는 클래스를 활용하세요.

카테고리:

업데이트:

댓글남기기