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)이 발생할 수 있어 이로 인한 성능 오버헤드가 있을 수 있음
'BACKEND > JAVA' 카테고리의 다른 글
자바 Enum의 특징과 사용법, 그리고 주의 사항을 알아보자 (0) | 2023.12.29 |
---|---|
오버로딩과 오버라이딩의 개념 및 차이점 (0) | 2023.12.13 |
equals()와 hashCode()의 역할 및 오버라이딩 시 주의사항 (0) | 2023.12.12 |