원시타입과 참조 타입
자바에서 자료 타입은 원시타입(Primitive Type)과 참조타입(Reference Type)으로 나뉜다.
이 두가지 타입 간에는 분명한 차이가 존재하며 필요에 따라 사용되는 것이 다르기 때문에 차이를 이번 공부로 확실히 알아둘 것이다.
⚫️ 원시 타입(Primitive Type)
| 논리형 | boolean | true / false |
| 문자형 | char | |
| 정수형 | byte | -128 ~127 |
| short | -32768 ~ 32767 | |
| int | -2147483648 ~ 2147483647 | |
| long | -9223372036854775808 ~ 9223372036854775807 | |
| 실수형 | float | 1.4E-45 ~ 3.4028235E38 |
| double | 4.9E-324 ~ 1.7976931348623157E308 |
정수, 실수, 문자, 논리 리터럴 등의 실제 데이터 값을 저장하는 타입이다.
값 자체를 스택 메모리에 저장한다. 따라서 값을 비교할 때 값 자체를 비교한다.
연산이 빠르며 메모리 효율성이 높다.
NULL 값을 가질 수 없다.
⚫️ 참조 타입(Reference Type)
객체의 번지를 참조하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다.
종류에는 클래스, 인터페이스, 배열, 열거형 등이 있다.
객체는 힙 메모리에 저장되고 객체를 가리키는 참조를 스택에 저장한다. 따라서 실제 메모리에 접근하기 위해서는 최소 2번의 메모리 접근을 해야하고 일부 타입은 필요시 언박싱 과정을 거치기 때문에 속도가 느리다.
값을 비교 할 때 메모리 주소를 비교하고 값과 상관 없이 오로지 객체의 메모리 주소가 같아야 같은 것으로 인식한다.
메모리 사용이 많다.
NULL 값을 가질 수 있다.
⚫️ 오토박싱 & 언박싱
원시 타입과 참조 타입이 서로 상호 작용할 때 오토박싱과 언박싱이 활용된다.
오토박싱과 언박싱은 성능에 영향을 미칠 수 있으므로 잦은 사용을 피해야한다.
📌 오토박싱
원시 타입을 대응되는 참조 타입으로 변환하는 과정
📌 언박싱
참조 타입을 다시 원시 타입으로 자동 변환하는 과정
⚫️ Wrapper 클래스
Wrapper 클래스란 기본 타입(Primitive type) 의 데이터를 객체로 표현할 수 있게 하는 클래스다.
| 기본 타입(Primitive type) | 래퍼 클래스(Wrapper class) |
| byte | Byte |
| char | Character |
| int | Integer |
| float | Float |
| double | Double |
| boolean | Boolean |
| long | Long |
| short | Short |

이와 같은 계층 구조 처럼 모든 Wrapper 클래스는 Object 클래스의 자식 클래스이고 숫자를 다루는 래퍼 클래스의 부모 클래스는 Number 클래스임을 알 수 있다.
Wrapper 클래스의 활용
- Collection(List, Map) 에 숫자나 논리 값을 넣을 때 활용한다.
- NULL 값을 넣거나 비교해야 할 때 활용한다.
- 객체처럼 다뤄야할 때 활용한다.
원시타입과 Wrapper 클래스의 차이
| 원시 타입 | Wrapper 클래스 | |
| 메모리 저장 | 값 자체 저장 | 객체의 주소 저장 |
| NULL 가능 여부 | 불가능 | 가능 |
| 메서드 사용 | 불가능 | 가능 |
| 성능 | 빠름 | 느릴 수 있음 |
'Programming > Java' 카테고리의 다른 글
| Interface와 Abstract (1) | 2025.06.15 |
|---|---|
| JVM이 무엇이고 구조에 대해 알아보자 (0) | 2025.05.10 |
| 의존성에 대해서 (2) | 2025.03.20 |
| BufferedReader와 BufferedWriter (2) | 2025.02.15 |
| 객체지향에게 역할과 책임이란 (1) | 2025.02.11 |