자바는 아주 엄격한 타입 시스템을 가집니다. 변수에는 크게 원시 타입(Primitive Type)과 참조 타입(Reference Type) 두 가지가 있습니다.
int, double, boolean 같은 원시 타입은 데이터 그 자체가 Stack(스택) 메모리에 직접 저장되어 빠르고 가볍습니다. 반면 String이나 Class 객체 같은 참조 타입은 거대한 실제 데이터가 Heap(힙) 메모리에 저장되고, Stack에는 그 Heap 메모리의 '주소(리모컨)'만 보관됩니다.
원시 타입은 내 호주머니(Stack)에 쏙 들어가는 작은 '동전 상자'입니다. 값을 바로 꺼내 쓸 수 있죠.
참조 타입은 너무 커서 호주머니에 들어가지 않는 '자동차(Heap)'입니다. 호주머니에는 자동차 자체가 아닌, 자동차 문을 열 수 있는 스마트키(메모리 주소)만 보관합니다.
| 비교 항목 | 원시 타입 (Primitive Type) | 참조 타입 (Reference Type) |
|---|---|---|
| 저장 방식 | 값(Value) 자체를 스택(Stack)에 저장 | 객체는 힙(Heap)에 생성, 스택에는 주소 저장 |
| 종류 | int, double, boolean, char 등 8개 |
String, 배열([]), 개발자가 만든 Class 등 |
| 기본값(Default) | 0, 0.0, false 등 | null (주소가 없음을 의미) |
| 비교 연산 (==) | 실제 '값'이 같은지 비교 | 같은 객체를 가리키는지 '주소' 비교 (값 비교는 .equals() 사용) |