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