개발놀이터

원시타입과 참조타입 본문

Java

원시타입과 참조타입

마늘냄새폴폴 2022. 8. 1. 12:51

원시타입

원시타입은 정수, 실수 ,문자, 논리 리터럴등 실제 데이터 값을 저장하는 타입이다. int a = 10; 과 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 스택 영역에 생성되고 ,10이라는 값이 들어간다. 즉 원시타입은 메모리 공간의 실제 데이터 값이 저장되어 있다.

 

 

참조타입

참조타입은 기본타입을 제외한 타입으로 객체의 주소를 저장하는 타입이다. 문자열, 배열, 열거형 상수, 클래스, 인터페이스 등이 있다. Java에서 실제 객체는 힙 영역에 저장되며, 참조 타입 변수는 실제 객체의 주소를 스택 영역에 저장한다. 그리고 객체를 사용할 때마다 참조 변수에서 저장된 객체의 주소를 불러와 사용하게 된다.

 

Person p = new Person(); 이라는 코드를 작성했다면 p라는 이름의 메모리 공간이 스택 영역에 생성되고 생성된 p의 인스턴스는 힙 영역에 생성된다. 즉, 스택 영역에 생성된 참조 변수는 p의 힙 영역에 생성된 p의 인스턴스 주소 값을 가지게 된다.

 

 

원시타입 vs 참조타입

 

원시타입은 스택 영역에 존재한다. 반면 참조타입은 스택 영역에는 참조  값만 있고, 실제 값은 힙 영역에 존재한다. 참조 타입은 최소 2번 메모리 접근을 해야하고 일부 타입의 경우 값을 필요로 할 때 언박싱 과정(ex. Double -> double, Integer -> int)을 거쳐야 하므로 원시타입과 비교해서 접근속도가 느린 편이다.

 

 

메모리 관점

원시타입보다 참조타입이 사용하는 메모리 양이 압도적으로 높다. 이외의 참조타입은 최근 들어 64비트의 JVM을 많이 사용하므로 일반적으로 64비트를 차지한다고 한다.

 

 

NULL 관점

원시타입은 null을 담을 수 없지만, 참조타입은 null을 담을 수 있다. 이것은 원시타입의 경우, 값이 없으면 디폴트 값을 반환하기 때문이다. (ex. int는 0, String은 "")

 

 

제네릭 관점

원시타입은 제네릭 타입에서 사용할 수 없지만, 참조타입은 가능하다.

 

 

Reference

https://steady-coding.tistory.com/606

 

[Java] 원시 타입 vs 참조 타입

java-study에서 스터디를 진행하고 있습니다. 원시 타입 원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입이다. int a = 10; 와 같이 코드를 작성했다면 정수 값이 할당될

steady-coding.tistory.com

 

'Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.08.03
GC (Garbage Collection)  (0) 2022.08.01
동일성(identity)과 동등성(equality)  (0) 2022.08.01
객체지향 5대 원칙 SOLID  (0) 2022.08.01
자바의 Metaspace  (0) 2022.07.28