Post

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.