JAVA/Java

[Java] 원시 타입(Primitive Type)과 참조 타입(Reference Type)

민트맛녹차 2022. 9. 6. 16:52

자바의 데이터 타입에는 원시 타입과 참조 타입이 있다.

 

원시 타입(Primitive Type)

종류 데이터 타입 크기 표현 범위
논리형 boolean 1 byte true or false
문자형 char 2 byte 'u0000' ~ 'uFFFF' (16비트 유니코드)
정수형 byte 1 byte -128(2^7)  ~ 127(2^7-1)
short 2 byte -32,768(2^15) ~ 32,767(2^15-1)
int 4 byte -2,147,483,648(2^31) ~ 2,147,483,647(2^31-1)
long 8 byte -9,223,372,036,854,775,808(2^63) ~ 9,223,372,036,854,775,807(2^63-1)
실수형 float 4 byte -3.4E38 ~ 3.4E38
double 8 byte -1.7E308 ~ 1.7E308

원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입이다.

float과 double은 정밀도에서 차이가 있다. float은 6자리의 정밀도를 가지고 double은 15자리의 정밀도를 가진다. float과 double에 대해서는 나중에 다시 정리해야겠다.

 

참조 타입(Reference Type)

참조 타입은 기본 타입을 제외한 타입으로, 객체의 주소를 저장하여 객체를 참조하는 타입이다. 클래스와 인터페이스 등이 있다.

 

원시 타입 vs 참조 타입

Python은 모든 것이 객체로 되어있어 원시타입을 지원하지 않는다. 반면 Java는 참조 타입 뿐만 아니라 원시 타입도 지원하는데 원시 타입을 남겨둔 이유가 있을 것이다.

 

원시 타입의 장점

원시 타입은 참조 타입에 비해 성능 상 이점이 있다.

접근 속도가 참조 타입에 비해 빠르다. 스택 영역에 참조값이 있고 실제 값은 힙 영역에 있는 참조 타입과 다르게, 원시 타입은 스택 영영에 데이터 값이 존재한다. 또한 참조 타입은 값을 찾을 때 언박싱을 해야 하므로 접근 속도가 비교적 느려지게 된다.

차지하는 메모리의 양이 적다. 원시 타입보다 참조 타입이 사용하는 메모리양이 높기 때문에 원시 타입이 참조 타입보다 메모리를 효율적으로 사용할 수 있다.

 

원시 타입의 단점

반면 원시 타입은 단점 또한 존재한다.

int i = null;	// 불가능
List<int> list;	// 불가능

null을 담을 수 없다. 참조 타입은 null을 담을 수 있는 반면, 원시 타입은 불가능하다.

제너릭 타입에서 사욯할 수 없다. 제너릭 타입은 컴파일 단계에서 Object 타입으로 캐스팅 되는데 참조 타입과 다르게 원시 타입은 Object 타입으로 캐스팅 될 수 없다.

 

 

 

참조
윤성우의 열혈 JAVA  프로그래밍
https://gona.tistory.com/57