Primitive Type
기본 데이터 타입으로 정수, 실수, 불리언 등의 실제 데이터 값을 저장하는 타입
- int, long, double, float, boolean
Reference Type
객체 참조 타입으로 객체의 주소를 저장하는 타입
- 배열, 클래스, 인터페이스
두 타입의 차이는 메모리 저장 위치와 데이터 처리 방식에 있다.
메모리 저장 위치
Primitive Type
- 메모리의 스택 영역에 저장하고, 그 값을 직접 갖는다.
- 스택 영역에 저장되기 때문에 메소드 호출이 종료되면 자동으로 사라진다.
- 스택 영역에 저장된 변수들은 값에 직접 접근이 가능하기 때문에, 메모리 절약 및 속도가 중요한 경우에 사용한다.
Reference Type
- 객체의 주소를 스택 영역에 저장한다.
- 실제 데이터는 힙 영역에 저장되며, 참조 변수는 이 데이터를 가리키는 역할을 한다.
- 값을 변경하거나 읽기 위해서는 참조 변수를 통해서 가능하다.
- 힙 메모리 특성상 큰 데이터를 처리할 수 있고 생명주기가 길어 레퍼런스 타입은 복잡한 데이터 구조와 대규모 처리에 유용하다.
- 힙 메모리의 객체는 명시적으로 삭제하지 않는 한 GC에 의해 관리되어 생명주기가 길어질 수 있다.
데이터 처리 방식
Primitive Type
- 값 자체가 변수에 직접 저장되기 때문에, 값에 의해 데이터가 처리된다.
Reference Type
- 참조 주소를 통해 데이터가 처리된다.
프리미티브 타입은 간단한 값 처리에 효율적이고, 레퍼런스 타입은 복잡한 데이터 구조를 다루며 객체 지향 프로그래밍이 가능하게 한다.
Reference Type 변수가 힙 영역에 저장된 객체를 가리킬 때 주의할 점
여러 개의 레퍼런스 변수가 동일한 객체를 참조할 수 있다. 이런 경우 하나의 변수를 통해서 객체의 상태가 변경 될 수 있다. 따라서 다른 변수에도 그 상태가 반영이 되어 예상치 못한 결과를 가져올 수 있다.
그리고 객체가 더 이상 사용되지 않는 경우 가비지 컬렉션이 객체를 자동으로 제거하는데, 만약 객체가 변수에 의해 참조되고 있으면 가비지 컬렉션이 메모리를 회수할 수 없다. 이는 메모리 누수로 이어질 수 있다.
'Java' 카테고리의 다른 글
Process와 Thread (2) | 2025.01.07 |
---|---|
String 객체 선언하기 (0) | 2025.01.06 |
동등성과 동일성 (0) | 2025.01.06 |
Enum (0) | 2025.01.06 |
오버로딩과 오버라이딩 (0) | 2025.01.06 |