자바

Java 기본 vs 참조 타입 완전 정리

a-bell2 2025. 6. 2. 18:08

📘 Java 기본 vs 참조 타입 완전 정리

자바는 객체 지향 언어이며, 데이터를 다루는 방식에서도 크게 두 가지 타입으로 나뉩니다:
**기본 타입(Primitive Type)**과 **참조 타입(Reference Type)**입니다.


🔹 기본 타입이란?

  • 숫자, 문자, 논리값 등을 직접 다루는 타입입니다.
  • 변수에 실제 데이터 값 자체가 저장됩니다.
  • 메모리에서 스택(Stack) 영역에 위치합니다.

📌 예시:

java
복사편집
int age = 25; // 25라는 숫자 자체가 스택에 저장됨

🔹 참조 타입이란?

  • 객체, 배열 등 사용자 정의 구조를 표현하는 타입입니다.
  • 변수에 저장되는 것은 데이터가 아니라 객체의 주소(메모리 참조값) 입니다.
  • 객체는 힙(Heap) 영역에 생성되며, 변수는 그 주소를 스택에 저장합니다.

📌 예시:

java
복사편집
String greeting = "Hello"; // "Hello" 객체는 힙에 있고, 변수는 그 주소만 기억함

📊 기본 타입 vs 참조 타입 요약 비교

 

항목 기본 타입 참조 타입
저장 값 값 자체 객체의 주소
위치 스택(Stack) 힙 객체의 주소를 스택에 저장
예시 int x = 10; String s = "hi";
 

 


🧠 메모리 구조 간단 정리

자바 프로그램이 실행되면 다음과 같은 메모리 영역이 생성됩니다:

  1. 메서드 영역 (Method Area)
    클래스 정보, static 변수, 메서드 코드 저장
  2. 힙 영역 (Heap)
    new 키워드로 생성된 객체 및 배열 저장
  3. 스택 영역 (JVM Stack)
    메서드 호출 시마다 생성되는 프레임, 지역 변수 저장

🧩 스택 vs 힙 — 차이와 특징

항목스택(Stack)힙(Heap)
역할 지역 변수, 참조값 저장 객체 및 배열 저장
관리 주체 JVM 자동 관리 JVM 가비지 컬렉터가 관리
속도 빠름 상대적으로 느림
할당 방식 고정 크기, 함수 단위 동적 크기, 필요 시 생성
단점 크기 제한, 유연성 부족 단편화 발생 가능, 성능 이슈
 

🔍 null 과 NullPointerException

null의 의미

  • 참조 타입 변수는 어떤 객체도 가리키지 않을 수 있습니다.
  • 이럴 때 사용하는 특수 값이 바로 null입니다.

📌 예시:

java
복사편집
String text = null; // 아무 객체도 참조하지 않음

이 상태에서 text.length() 같은 메서드를 호출하면 NullPointerException이 발생합니다.


✅ 자바 메모리에서 변수 위치

변수 종류저장 위치값의 형태
int, boolean 등 기본형 스택 값 자체
String, 배열 등 참조형 스택에는 주소 / 힙에는 객체 주소값 + 객체 내용
 

🔁 문자열과 참조

자바에서는 문자열 리터럴을 직접 저장하지 않고, String 객체로 생성해서 다룹니다.
아래 코드를 보세요:

java
복사편집
String name = "홍길동"; String job = "홍길동";
  • 문자열 리터럴이 같으면 동일한 String 객체를 공유합니다.
  • 따라서 name == job 결과는 true가 될 수 있습니다.

하지만 new String("홍길동")을 쓰면 힙에 새 객체가 만들어지고,
그 주소는 다르므로 == 연산 결과는 false입니다.


🎯 핵심 정리 요약


 

개념 설명
기본 타입 값 자체 저장, 스택에 위치
참조 타입 객체의 주소 저장, 객체는 힙에 위치
메모리 구조 JVM은 메서드, 힙, 스택 영역으로 나뉨
== 연산자 기본 타입: 값 비교 / 참조 타입: 주소(객체 동일성) 비교
null 참조 대상이 없음 (객체 미존재 상태)
NullPointerException null 상태에서 객체 메서드나 필드 접근 시 발생
 

💡 Tip
참조 타입 변수는 null 상태에서 사용하면 반드시 예외가 발생하므로
항상 객체 생성 여부를 확인하거나 Optional, if (obj != null) 조건을 활용하세요.