2026년 02월 20일

☕ Java 정수 타입 완전 정복

Java Spring Boot
Cover Image

☕ Java 정수 타입 완전 정복

핵심 요약: Java는 정수를 저장하기 위해 5가지 타입을 제공한다.
타입마다 메모리 크기가 다르고, 그에 따라 저장 가능한 값의 범위가 달라진다.


1️⃣ 정수 타입 한눈에 보기

타입메모리 크기저장 가능한 값의 범위
byte1byte (8bit)-128 ~ 127
short2byte (16bit)-32,768 ~ 32,767
char2byte (16bit)0 ~ 65,535 (유니코드)
int4byte (32bit)-2,147,483,648 ~ 2,147,483,647
long8byte (64bit)-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

💡 값의 범위를 다 외울 필요는 없다. 메모리 크기(bit 수) 만 기억하자!


2️⃣ 메모리 구조와 부호 비트

정수 타입은 메모리에서 아래와 같이 2진수로 저장된다.

최상위 bit값의 범위
00 ~ (2^(n-1) - 1)
1-2^(n-1) ~ -1

음수는 어떻게 저장될까? — 2의 보수

-2가 메모리에 저장되는 과정:

① -2의 2진수: 1 1 1 1 1 1 1 0
② 1의 보수:   0 0 0 0 0 0 0 1  (0↔1 반전)
③ +1:         0 0 0 0 0 0 1 0  → 10진수로 2
④ 부호 적용:  -2 ✅

3️⃣ 정수 리터럴 작성법

코드에 직접 작성하는 값을 리터럴(Literal) 이라고 한다. Java는 4가지 진수 표기를 지원한다.

진수접두사예시10진수 값
2진수0b / 0B0b101111
8진수001311
10진수없음365365
16진수0x / 0X0xB3179
int bin = 0b1011;   // 2진수  → 11
int oct = 013;      // 8진수  → 11
int dec = 365;      // 10진수 → 365
int hex = 0xB3;     // 16진수 → 179

4️⃣ 주의사항 — 범위 초과 & long 타입

⚠️ 범위를 초과하면 컴파일 에러!

byte var = 127;   // ✅ 정상
byte var = 128;   // ❌ 컴파일 에러: cannot convert from int to byte

⚠️ long 타입은 L 접미사 필수!

컴파일러는 정수 리터럴을 기본적으로 int로 간주한다.
int 범위를 초과하는 값은 반드시 L(또는 l) 을 붙여야 한다.

long ok  = 1000000000000L;   // ✅ L 접미사 붙임
long err = 1000000000000;    // ❌ 컴파일 에러: int 범위 초과

💡 소문자 l은 숫자 1과 혼동될 수 있으므로 대문자 L 사용을 권장한다.

← 목록으로 돌아가기