자바의 데이터 타입은 크게 두 가지가 있다.
1. Primitive Type : 정수, 실수, 문자, 논리 리터럴 등의 실제 데이터 값을 저장하는 타입
2. Reference Type : 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입
원시 타입 (기본 타입, Primitive Type)
| 종류 | 데이터형 |
| 논리형 | boolean |
| 문자형 | char |
| 정수형 | byte |
| 정수형 | short |
| 정수형 | int |
| 정수형 | long |
| 실수형 | float |
| 실수형 | double |
참조 타입 (Reference Type)
: 원시 타입을 제외한 타입들
ex) 문자열, 배열, 열거, 클래스, 인터페이스
Java에서 실제 객체는 힙 영역에 저장된다.
참조 타입 변수는 스택 영역에 실제 객체들의 주소를 저장하고, 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와 사용한다.
정적 메모리 스택 영역
- 스택 영역에는 기본 타입 변수가 할당되고 변수의 실제 값들이 저장된다.
참조 타입 변수들은 이 스택 영역에서 힙 영역에 생성된 객체들의 주소 값을 저장하고 있는다.
객체 안 메소드의 작업이 종료되면 할당되었던 메모리 공간은 반환되어 비워진다.
- 원시 타입은 스택 메모리에 값이 존재한다.
동적 메모리 힙 영역
- 힙 영역에는 객체와 배열이 생성된다.
참조 타입들이 이 객체들의 주소를 스택 영역에 저장한다. 프로그램 실행 시 메모리에 동적으로 할당된다.
참조하는 변수가 없으면 자바의 가비지 컬렉터가 제거한다.
- 참조 타입은 하나의 인스턴스이기 때문에 스택 메모리에는 참조 값만 있고, 실제 값은 힙 메모리에 존재한다.
래퍼 클래스 (Wrapper Class)
- 원시 타입을 객체로 다루기 위해 사용하는 클래스
- 자바의 모든 원시 타입은 그 값에 맞는 객체를 생성할 수 있고, 그 객체를 포장 객체라고 한다.
- ex) byte → Byte, int → Integer
- 포장하고 있는 원시 타입 값은 외부에서 변경할 수 없다.
- 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.
Boxing
: 원시 타입의 값을 포장 객체로 만드는 과정
Unboxing
: 포장 객체에서 원시 타입의 값을 얻어내는 과정
원시 타입 vs 참조 타입
| Primitive Type (원시 타입) | Reference Type (참조 타입) | |
| Null 포함 가능 | X | Null 포함 O |
| Generic 타입에서 사용 가능 | X | Generic 타입에서 사용 O |
| 접근 속도 | 비교적 빠름 | 언박싱 → 비교적 느림 |
| 변수 안에 저장되는 값 | 실제 값 | 메모리의 번지 |
| 값 존재 위치 | 스택 메모리 | 힙 메모리 |
| 사용하는 메모리 양 | 매우 큼 → 효율적 사용 ex) boolean - 1 bit Boolean - 128 bits |
https://daegom.com/main/java-post4/
혼자 공부하는 자바 498쪽
'자율 학습 > 학습' 카테고리의 다른 글
| IntelliJ 필수 단축키 (0) | 2022.12.29 |
|---|---|
| [JAVA] String을 JSON으로 변환하고 따옴표 제거하기 - JSONParser, getAsString, replaceAll (+ HttpPost, HttpClient) (0) | 2022.12.29 |
| 프로세스와 스레드의 차이 (0) | 2022.11.06 |
| bxSlider에서 onclick 이벤트가 안 될 때 (0) | 2022.10.19 |
| 카카오 사태 알아보기 - DR (Disaster Recovery, 재해복구), Mirror site, Hot Site, Warm Site, Cold Site (0) | 2022.10.18 |