JAVA

Java 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이 - 메모리

해니01_15 2024. 11. 15. 09:28

 

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은 힙에 저장된다. 스택에는 힙의 객체 주소만 저장되고, 저장된 주소를 통해 힙의 객체를 참조한다. 
  • 기본타입스택에 직접 값을 저장해 빠르지만 참조 타입은 힙 메모리에 할당 되어 가비지 컬렉션에 의해 메모리 관리가 이루어진다. 참조 타입은 객체가 생성 될 때마다 힙에 새로운 공간을 사용해야 하므로 메모리 관리도 필요하고 속도도 상대적으로 느리다.