코딩마을방범대
[JAVA] 원시타입(Primitive Type)과 참조타입(Reference Type) & Object와 Wrapper 본문
🎃 기타/상식 ❗
[JAVA] 원시타입(Primitive Type)과 참조타입(Reference Type) & Object와 Wrapper
신짱구 5세 2024. 9. 27. 16:50728x90
스택 영역의 객체 타입
원시타입(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)
참조하는 변수가 없는(사용되지 않는) 객체를 제거하여 메모리를 관리함
원시타입과 참조타입의 차이점
원시타입 | 참조타입 | |
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)
728x90
'🎃 기타 > 상식 ❗' 카테고리의 다른 글
KRaft의 개념과 Kafka와의 상관관계 (2) | 2024.11.28 |
---|---|
Zookeeper의 개념과 Kafka와의 상관관계 (2) | 2024.11.27 |
[JAVA] 메서드 정의의 기본 구조 (0) | 2024.09.27 |
HikariCP에서 발생하는 연결이 반복해서 열리고 닫히는 현상 (0) | 2024.08.29 |
DDD(Domain Driven Design) 개념 (0) | 2024.05.22 |