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로 내려받아 복습하거나, 강의 자료로도 활용해도 좋습니다.


🔔 이 블로그에서는 앞으로도 자바 기초 개념을 성능, 보안, 비용 관점에서 하나씩 파헤쳐 볼 예정입니다.
관심 있다면 즐겨찾기 해주세요! 😊


댓글

가장 많이 본 글