Java 참조형(Reference Data Types)과 기본형(Primitive Types) 차이점
Java 언어의 타입 시스템은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉩니다. 이 둘은 저장 방식, 메모리 구조, 처리 속도, 기능 측면에서 분명한 차이가 있습니다. 본 문서에서는 각 타입의 특징과 차이점을 사례 중심으로 명확히 설명하며, 혼란을 방지할 수 있는 이해 중심의 안내서를 제공합니다.

목차
- Java의 데이터 타입 개요
- 기본형 데이터 타입의 특성
- 참조형 데이터 타입의 특성
- 메모리 저장 방식의 차이
- Boxing과 Unboxing: 두 타입의 연결고리
- 성능 및 활용에 따른 고려사항
- 타입 선택 시 모범 사례
1. Java의 데이터 타입 개요
Java의 데이터는 크게 두 가지로 나뉩니다:
- Primitive Type: 값 그 자체를 저장
- Reference Type: 객체의 주소를 저장
이 구분은 메모리 구조, 비교 방법, null 처리 등에 있어 근본적인 차이를 발생시킵니다.
2. 기본형 데이터 타입의 특성
기본형(Primitive Types)은 Java에서 가장 단순하고 빠른 형태의 데이터입니다. Java는 총 8개의 기본형을 제공합니다.
| 타입 | 크기 | 예시 |
|---|---|---|
| int | 32bit | int x = 10; |
| double | 64bit | double pi = 3.14; |
| boolean | 1bit (논리적) | boolean flag = true; |
| char | 16bit (Unicode) | char c = 'A'; |
기본형은 스택(Stack) 메모리에 저장되며 다음과 같은 특징을 가집니다:
- 값 자체를 저장 (복사 시 원본과 독립적)
- 비교 연산이 값 중심 (== 사용)
- 객체가 아니므로 메서드 사용 불가
3. 참조형 데이터 타입의 특성
참조형은 객체를 가리키는 메모리 주소(참조값)를 저장합니다.
대표적인 참조형:
- 클래스:
String,Scanner - 배열:
int[],String[] - 인터페이스, 열거형 등
String name = "Java";
int[] numbers = {1, 2, 3};
참조형은 힙(Heap) 메모리에 생성되고, 변수에는 객체의 주소값만 저장됩니다.
4. 메모리 저장 방식의 차이
두 타입 간의 가장 핵심적인 차이는 메모리 저장 위치에 있습니다.
- 기본형: Stack에 저장 (고속 접근)
- 참조형: Heap에 저장, 변수는 Stack에 참조값 보관
이로 인해 참조형은 GC(Garbage Collection)의 대상이 되며, 성능과 관련된 판단 기준이 됩니다.


5. Boxing과 Unboxing: 두 타입의 연결고리
기본형을 객체로 감싸거나 다시 풀어주는 과정은 Java에서 자동으로 처리됩니다.
- Boxing:
int → Integer - Unboxing:
Integer → int
Integer num = 100; // Auto-boxing
int x = num; // Auto-unboxing
컬렉션과 같이 객체만 처리 가능한 구조에서는 Boxing이 불가피합니다.
6. 성능 및 활용에 따른 고려사항
- 기본형은 계산, 반복문, 조건 처리 등 성능 중심 작업에 적합
- 참조형은 기능 중심, 컬렉션 처리, 동적 구조 등에 적합
또한, null 처리 가능성은 참조형만 가지므로, NPE(NullPointerException) 관리에 주의가 필요합니다.
7. 타입 선택 시 모범 사례
- 단순 값 처리: 기본형 우선
- 컬렉션 저장, 객체 중심 설계: 참조형 활용
- 박싱 남용 방지 – 반복 루프에서
Integer보다int사용 - nullable 값 처리:
Optional또는 참조형 활용
Optional age = Optional.ofNullable(null);'프로그래밍 언어 > Java' 카테고리의 다른 글
| Java의 참과 거짓, boolean 타입으로 조건 처리하기 (1) | 2025.06.14 |
|---|---|
| Java 실수형 데이터 타입, float vs double (0) | 2025.05.06 |
| Java 정수형(Integer Types) 크기, 범위, 메모리 사용 분석 (0) | 2025.04.28 |
| Java char 타입의 주요 사용 사례와 예제 (0) | 2025.04.22 |
| boolean 데이터 타입으로 자바 프로그램 논리 제어하기 (0) | 2025.04.16 |