-
[Java] Primitive type과 Reference typeJava 2022. 1. 3. 16:58
자바에서 타입을 크게 두 가지로 분류할 수 있다.
하나는 원시 타입(primitive type), 또 다른 하나는 참조 타입(reference type)이다.
원시 타입: boolean(1 byte), char (2 bytes), byte(1 byte), short(2 bytes), int(4 bytes), long(8 bytes), float(4 bytes), double(8 bytes)
참조 타입: Integer, Long, Double 등 new 연산자로 생성할 수 있는 객체
원시 타입 vs 참조 타입
원시 타입과 참조 타입의 기능적 차이는 크게 2가지가 있다.
1. null을 담을 수 있는가 ❔
원시 타입은 null을 담을 수 없지만 참조 타입은 null을 담을 수 있다.
int i = null; // 불가능 Integer integer = null; // 가능
2. 제네릭 타입에서 사용할 수 있는가 ❔
원시 타입은 제네릭 타입에서 사용할 수 없지만 참조 타입은 제네릭 타입에서 사용할 수 있다.
List<int> i; // 불가능 List<Integer> integer; // 가능
그렇다면 원시 타입의 장점은 무엇인가 ❔❔
원시 타입은 참조 타입과 비교해 성능의 이점이 있다.
1. 접근 속도
원시 타입은 메모리 상 스택 영역에 값이 존재하는 반면, 참조 타입은 스택 영역에 참조값만 있고, 실제 값은 힙 영역에 존재한다. 그래서 값이 필요할 때마다 언박싱 과정을 거쳐야 하기 때문에 원시 타입과 비교해 접근 속도가 느리다.
2. 메모리
원시 타입에 비해 참조 타입이 차지하는 메모리 양이 훨씬 많다.
원시 타입 참조 타입 boolean - 1 bit Boolean - 128 bits bypte - 8 bits Byte - 128 bits short, char - 16 bits Short, Character - 128 bits int, float - 32 bits Integer, Float - 128 bits long, double - 64 bits Long, Double - 192 bits
Reference
https://siyoon210.tistory.com/139
https://www.baeldung.com/java-primitives-vs-objects
'Java' 카테고리의 다른 글
[Java] Serialization과 Deserialization (0) 2022.01.03 [Java] String, StringBuffer, StringBuilder (0) 2022.01.03 [Java] Identity와 Equality (0) 2022.01.03 [Java] Shallow copy와 Deep copy (0) 2022.01.02 [Java] Error와 Exception (1) 2022.01.02