본문 바로가기
BACKEND/JAVA

자바의 원시 타입(Primitive Type) VS 참조 타입 (Reference Type)

by 콩밍디 2023. 12. 18.

1. 원시 타입(Primitive Type)과 참조 타입(Reference Type)

JAVA에는 데이터 타입을 원시 타입(Primitive Type)과 참조 타입(Reference Type)으로 나눌 수 있다.

 

원시 타입(Primitive type)은 기본 데이터 유형으로, 스택 메모리에 직접 값이 저장된다.

원시 타입의 종류로는 정수 타입의 byte, short, int, long / 실수 타입의 float, double
논리 타입의 boolean / 문자형의 char로 총 8개의 타입이 있다.


참조 타입(Reference type)은 객체의 참조를 저장하는 데 사용되며,
객체는 힙 메모리에 저장된다.

참조 타입의 종류로는 클래스, 인터페이스, 배열 등이 있다.

 

2. 원시 타입과 참조 타입의 차이점

1. 저장 방식
원시 타입 - 변수에 실제 값이 직접 저장되며, 이 값은 스택 메모리에 저장됨
참조 타입 - 변수는 객체에 대한 참조(메모리 주소)를 저장하며, 해당 객체는 힙 메모리에 저장됨

 

2. 메모리 위치
원시 타입 - 값이 스택 메모리에 직접 저장되므로 빠르게 액세스할 수 있음
참조 타입 - 변수는 스택 메모리에 있지만, 객체는 힙 메모리에 있어 간접적인 액세스가 이루어짐

 

3. 크기
원시 타입 - 일반적으로 고정된 크기를 가짐
참조 타입 - 객체의 크기는 동적으로 할당되기 때문에 다양한 크기를 가질 수 있음

 

4. 기본 값
원시 타입 - 선언된 변수에 값이 할당되지 않으면 해당 원시 타입의 기본 값으로 초기화됨 (기본 값이 있으므로 null 불가)
참조 타입 - 선언된 변수에 값이 할당되지 않으면 null로 초기화됨

 

5. 비교 방법
원시 타입 - 값 자체를 비교함
참조 타입 - 주소(참조)를 비교하며, 객체의 내용을 비교하려면 객체에 대한 equals() 메서드를 사용해야 함

 

6. 메모리 관리
원시 타입 - 자동으로 메모리에서 해제되므로 개발자가 명시적으로 메모리 관리를 할 필요가 없음
참조 타입 - 메모리를 해제할 필요가 없지만, 불필요한 객체에 대한 참조를 끊어서 가비지 컬렉션이 이루어지도록 해야 함

 

3. 성능 측면에서 참조 타입보다 원시 타입이 더 좋은 이유

1. 메모리 사용량
원시 타입 - 값 자체를 저장하기 때문에 메모리 사용이 효율적임
참조 타입 - 객체는 힙 메모리에 할당되어야 하며, 객체의 크기는 동적으로 변할 수 있어 추가적인 메모리 오버헤드가 발생할 수 있음

 

2. 메모리 접근 속도
원시 타입 - 스택 메모리에 직접 값이 저장되어 있어 더 빠르게 액세스할 수 있음
참조 타입 - 객체는 힙 메모리에 저장되어 있으므로 간접적인 참조를 통해 값을 얻어야 함

 

3. 자동 박싱/언박싱의 오버헤드
원시 타입 - 값이 직접 저장되므로 추가적인 변환 과정이 필요하지 않음
참조 타입 - 자동으로 박싱(Boxing) 및 언박싱(Unboxing)이 발생할 수 있어 이로 인한 성능 오버헤드가 있을 수 있음