Java

Primitive 타입과 Reference 타입

변위니 2025. 1. 6. 10:24

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