Java(자바) 자료형 완전 정리: 기본형 vs 참조형 부제:왜 String타입 혼자만 자료형 키워드 첫글자가 대문자 인가?
💡 자바 자료형 완전 정리: 기본형 vs 참조형
부제: 왜 String 타입 혼자만 자료형 키워드 첫 글자가 대문자일까?
자바(Java)를 공부하다 보면 가장 처음 마주치는 개념 중 하나가 자료형입니다.
자료형은 단순히 데이터를 저장하는 틀이 아니라, 실제로는 시간(속도), 공간(메모리 사용), **비용(GC, 처리 성능)**에 영향을 미치는 핵심 요소입니다.
이번 글에서는 자바의 **기본형(Primitive Type)**과 **참조형(Reference Type)**을
**물리적인 관점(시간, 공간, 비용)**에서 이해하고,
왜 자료형이 이렇게 나뉘는지, 실무에서 어떻게 선택해야 하는지도 함께 정리합니다.
🔹 자바의 자료형은 왜 나뉘어 있을까?
자바는 다음 세 가지 이유 때문에 자료형을 명확히 구분합니다.
-
성능 향상: 값 자체 저장으로 속도 ↑
-
메모리 효율성: 스택 vs 힙 구분으로 관리 효율화
-
보안 및 안정성: null 가능 여부, 불변성 등 차별화
| 구분 | 기본형 (Primitive) | 참조형 (Reference) |
|---|---|---|
| 저장 방식 | 값 자체 저장 | 값이 저장된 주소 저장 |
| 저장 위치 | 스택(Stack) | 힙(Heap) |
| null 가능 여부 | ❌ 불가능 | ✅ 가능 |
| 접근 속도 | ⏱ 빠름 | ⏱ 상대적으로 느림 |
| 메모리 사용량 | 🧠 작음 | 🧠 큼 |
| 사용 목적 | 계산, 성능 중심 | 객체 표현, 구조 중심 |
✅ 기본형 (Primitive Type)
✔️ 특징
-
변수에 값 자체가 저장됨
-
스택 메모리에 위치 → CPU 접근 속도 빠름
-
null 값을 가질 수 없음
-
값 비교는
==연산으로 가능
✔️ 종류
| 분류 | 자료형 |
|---|---|
| 정수형 | byte, short, int, long |
| 실수형 | float, double |
| 문자형 | char |
| 논리형 | boolean |
✔️ 장점
-
성능이 중요할 때 유리 (반복문, 계산 등)
-
고정 크기이므로 메모리 낭비 적음
-
연산 중심 로직에 최적화
✔️ 예시
int a = 10;
int b = 10;
System.out.println(a == b); // true → 값 비교
✅ 참조형 (Reference Type)
✔️ 특징
-
변수에는 값이 저장된 **주소(참조값)**가 저장됨
-
실제 값은 힙 메모리에 위치
-
null값 가질 수 있음 -
==는 주소 비교, 값 비교는.equals()사용
✔️ 종류
| 분류 | 예시 |
|---|---|
| 배열 | String[], int[] 등 |
| 클래스 | String, 사용자 정의 클래스 |
| 인터페이스 | Runnable, List 등 |
| 열거형 | enum |
✔️ 장점
-
구조화된 복잡한 데이터 표현 가능
-
여러 참조 변수가 같은 객체를 공유 가능
-
동적 메모리 사용이 가능해 유연함
✔️ 예시
String str1 = new String("java");
String str2 = new String("java");
System.out.println(str1 == str2); // false → 주소 비교
System.out.println(str1.equals(str2)); // true → 내용 비교
🔐 String은 왜 참조형일까?
String은 자바에서 예외적인 존재입니다. 이름은 마치 기본형처럼 보이지만, 실제로는 클래스입니다.
즉, 참조형에 해당합니다.
이유는 다음과 같습니다:
-
불변(immutable) 객체: 보안상 안전
-
메모리 최적화: 동일 문자열을
String Pool에 재사용 -
자주 사용됨: 거의 모든 프로그램에서 문자열은 필수
String str3 = "java";
String str4 = "java";
System.out.println(str3 == str4); // true → 같은 객체 공유
왜 String은 대문자로 시작할까?
자바에서는 클래스 이름은 대문자로, 기본형은 소문자로 시작하는 것이 규칙입니다.
String은 클래스이기 때문에 대문자로 시작하며, 기본형이 아닙니다.
📊 기본형 배열 vs 참조형 배열
🔸 기본형 배열
int[] nums = {1, 2, 3};
-
값이 직접 저장됨
-
연속된 메모리 공간 → 캐시 효율 높음
-
초기값:
0
🔸 참조형 배열
String[] names = {"Kim", "Lee"};
-
각 요소는 힙에 있는 객체의 주소 저장
-
초기값:
null -
같은 값이라도 객체가 다르면 주소가 다름
🧠 시간, 공간, 비용 비교
| 기준 | 기본형 | 참조형 |
|---|---|---|
| 접근 속도 (시간) | ⏱ 빠름 (스택 직접 접근) | ⏱ 느림 (힙 접근 + GC 영향) |
| 메모리 사용 (공간) | 🧠 작고 고정된 크기 | 🧠 크고 유동적인 구조 |
| 처리 비용 (비용) | 💰 낮음 (GC 대상 아님) | 💰 높음 (GC 처리, null 체크 필요) |
📌 어떤 상황에 어떤 자료형을 써야 할까?
| 상황 | 추천 자료형 | 이유 |
|---|---|---|
| 루프, 단순 계산 | 기본형 (int, double 등) |
빠른 처리 속도, 연산 성능 우수 |
| 문자열 처리 | String (참조형) |
불변성, 보안, 문자열 처리 기능 풍부 |
| 대량 수치 데이터 | 기본형 배열 (int[] 등) |
캐시 효율, 메모리 절약 |
| 유연한 구조 필요 | 참조형 (클래스, 배열) |
객체지향 프로그래밍 가능 |
✅ 마무리 요약
-
기본형은 값 자체를 저장하며 빠르고 가볍다
-
참조형은 주소를 저장하며 유연하지만 비용이 높다
-
자료형 선택 시에는 반드시 시간, 공간, 비용 세 가지 관점을 고려해야 한다
-
String은 참조형이지만 자바에서 가장 많이 쓰이는 특수한 케이스 → 보안성과 재사용성을 모두 만족하는 구조
📎 함께 보면 좋은 글
-
🔗 [String이 왜 immutable인가요? 보안과 성능 관점에서 풀어보기]
-
🔗 [자바 메모리 구조 완전 정복 (스택, 힙, 메서드 영역)]
궁금한 점은 댓글로 자유롭게 남겨주세요.
자료형 하나만 제대로 이해해도 자바가 더 명확하게 보입니다.
시간과 메모리, 그리고 보안까지 생각하는 프로그래밍, 이제 시작해보세요!
필요하다면 이 글을 PDF로 내려받아 복습하거나, 강의 자료로도 활용해도 좋습니다.
🔔 이 블로그에서는 앞으로도 자바 기초 개념을 성능, 보안, 비용 관점에서 하나씩 파헤쳐 볼 예정입니다.
관심 있다면 즐겨찾기 해주세요! 😊
댓글
댓글 쓰기