코딩마을방범대

[JAVA] 원시타입(Primitive Type)과 참조타입(Reference Type) & Object와 Wrapper 본문

🎃 기타/상식 ❗

[JAVA] 원시타입(Primitive Type)과 참조타입(Reference Type) & Object와 Wrapper

신짱구 5세 2024. 9. 27. 16:50
728x90

 

 

 

 

스택 영역의 객체 타입

 

원시타입(Primitive Type)

종류 데이터형 크기(byte/bit) 표현 범위
논리형 boolean 1 byte / 8 bit true 또는 false
문자형 char 2 byte / 16 bit '\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터)
정수형 byte 1 byte / 8 bit -128 ~ 127
" short 2 byte / 16 bit -32768 ~ 32767
" int 4 byte / 32 bit -2147483648 ~ 2147483647 (-21억 ~ +21억)
" long 8 byte / 64 bit -9223372036854775808 ~ 9223372036854775807(-100경 ~ + 100경)
실수형 float 4 byte / 32 bit 1.4E-45 ~ 3.4028235E38
" double 8 byte / 64 bit 4.9E-324 ~ 1.7976931348623157E308

 

 


 

 

참조타입(Reference Type)

  • 기본 자료형을 기초로 하여 만들어진 자료형
  • String, Array, Map, Set 등과 같은 클래스(Class)와 인터페이스(Interface), 열거형(Enum)

 

Java에서 실제 객체는 Heap 영역에 저장됨 -> 참조 타입 변수는 Stack 영역에서 실제 객체들의 주소를 저장함

 

  스택 영역 (정적) 힙 영역 (동적)
저장 기본(원시) 타입 변수 - 변수의 실제 값들이 저장됨
참조 타입 변수 - 힙 영역 객체의 주소 값을 저장함
객체배열 저장
크기 - 컴파일 시 측정 가능
- 고정된 양의 메모리가 할당됨
- 런타임 시 측정 가능
- 메모리 제한이 없음
예제 char c = 'A'
String A = " 테스트"
String address = A
A : "테스트"
가비지 컬렉터(Garbage Collector)
참조하는 변수가 없는(사용되지 않는) 객체를 제거하여 메모리를 관리함

 

출처: https://iyk2h.tistory.com/m/100

 

 

 

 


 

 

 

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

  원시타입 참조타입
null 가능 여부 불가능
ex: int i = null;
가능
ex: Integer i = null;
제너릭 타입 사용 가능 여부 불가능
ex: List<int> list;
가능
List<Integer> list;
접근 속도 객체가 스택 메모리에 실재하기 때문에 빠름 스택 메모리에는 참조값만 있고, 실제 값은 힙 메모리에 있기 때문에 값을 호출할 때마다 언박싱 과정을 거쳐야해서 원시타입에 비해 느림
메모리 boolean - 1bit
byte - 8bits
short, char- 16bits
int, float - 32bits
long, double - 64bits
Boolean - 128bits
Byte - 128bits
Short, Character - 128bits
Integer, Float - 128bits
Long, Double - 196bits
수정 시 데이터의 변화 스택 영역의 데이터 자체가 변경됨

ex: List, Map 등에서 데이터를 불러와서 수정해도, 따로 저장하지 않는 경우 원데이터에는 영향을 주지 않음
Heap 영역의 데이터를 불러와 수정되기 때문에 해당 객체를 참조하고 있는 모든 값에 영향을 줌

ex: List, Map 등에 객체가 할당되어 있는 경우에도 주소값을 참조하고 있는 것이기 때문에 데이터를 불러와 수정하면 Heap의 데이터 자체가 수정되어, 따로 저장 절차 없이 이후 호출 시 수정된 데이터가 적용되어있는 것을 확인할 수 있음 

 

 

 

 


 

 

 

 

 

 

 

Object 와 Wrapper

 

Object

  • 모든 Class와 Enum은 Object 클래스를 상속함
  • Interface는 Object를 상속하지 않음

 


 

Wrapper 클래스

  • 기본 자료형을 감싼 클래스
  • Byte, Short, Integer, Long, Float, Double, Character, Boolean 등

 


 

 

제네릭(Generic)에 사용되는 매개변수 T는 Object 자료형만 받을 수 있다.

(클래스로 정의된 객체만 전달 받는 것임)

제네릭에 기본 자료형에 적용해야하는 경우 Wrapper Class를 이용하면 된다.

 

 

 

 

 

 


참고사이트

[JAVA] 원시타입(Primitive Type) / 참조타입(Reference Type)

[자료구조] List Map Set의 특징과 차이점

 

 

728x90