Java 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이를 메모리 적인 측면에서 알아보자
[메모리 구조]
+---------------------------+ +---------------------------------+
| Stack | | Heap |
+---------------------------+ +---------------------------------+
| 기본 자료형 (Primitive) | | 참조 자료형 (Reference) |
|---------------------------| |---------------------------- |
| int a = 10; | | Integer obj = new Integer(10); |
| └──────── 10 | | └──────── [객체 내용 10] |
+---------------------------+ +---------------------------------+
| Integer obj | | |
| └───── 참조 주소 (ex: @200) ───────→ | [객체] |
+---------------------------+ +---------------------------------+
특징 | 기본 자료형(Primitive Type) | 참조 자료형 (Reference Type) |
저장 위치 | 스택(Stack) 또는 메소드 영역 | 힙(Heap)에 객체 저장, 스택에 참조 주소 저장 |
데이터 저장 방식 | 실제 값이 저장됨 | 힙 메모리에 데이터가 저장되고, 스택에 힙의 주소가 저장 |
메모리 할당 속도 | 빠름 | 느림 (힙 메모리 할당 및 가비지 컬렉션 필요) |
데이터 크기 | 고정 (예: int는 4바이트) | 가변 (객체의 크기에 따라 다름) |
null 허용 여부 | 허용하지 않음 | null 값을 가질 수 있음 |
사용 예 | int, float, boolean 등 | String, Integer, Array, 사용자 정의 클래스 등 |
기본값 (초기화하지 않은 경우) | 타입별 기본값 (예: 0, false) | null |
- 기본 자료형 : int , double 같은 기본 타입은 스택 또는 메서드 영역에 직접 값을 저장한다.
예를 들어 int a= 10; 일 때 a라는 변수 자체에 10이 저장된다. - 참조 자료형: 참조자료형은 힙 메모리에 데이터를 저장하고 스택에는 힙 메모리의 주소만 저장한다.
예를 들어 Integer obj = new Integer(10); 에서 obj 는 스택에 저장되지 만 실제 값 10은 힙에 저장된다. 스택에는 힙의 객체 주소만 저장되고, 저장된 주소를 통해 힙의 객체를 참조한다. - 기본타입은 스택에 직접 값을 저장해 빠르지만 참조 타입은 힙 메모리에 할당 되어 가비지 컬렉션에 의해 메모리 관리가 이루어진다. 참조 타입은 객체가 생성 될 때마다 힙에 새로운 공간을 사용해야 하므로 메모리 관리도 필요하고 속도도 상대적으로 느리다.
'JAVA' 카테고리의 다른 글
Java 참조 타입 (Reference Type) 왜 쓰나요? (0) | 2024.11.17 |
---|---|
Java 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이 (0) | 2024.11.16 |
Scanner를 그만 쓰고 BufferReader/BufferedWriter를 사용하자 (0) | 2024.11.14 |
Java 에서 큰따옴표(" ")와 작은따옴표(' ') 의 차이 (1) | 2024.11.10 |
자바 표준 입력 Scanner 클래스를 알아보자 (4) | 2024.11.09 |