📘 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"; |
🧠 메모리 구조 간단 정리
자바 프로그램이 실행되면 다음과 같은 메모리 영역이 생성됩니다:
- 메서드 영역 (Method Area)
클래스 정보, static 변수, 메서드 코드 저장 - 힙 영역 (Heap)
new 키워드로 생성된 객체 및 배열 저장 - 스택 영역 (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) 조건을 활용하세요.
'자바' 카테고리의 다른 글
자바 열거(enum) 타입 완벽 정리 (0) | 2025.06.03 |
---|---|
Java 배열 완전 정복: 배열 선언부터 향상된 for문까지! (2) | 2025.06.02 |
자바 기초 - 조건문과 반복문 완전 정리 (0) | 2025.06.02 |
자바 연산자 정리 (0) | 2025.06.02 |
타입변환, 콘솔 입출력, Scanner 완전 정리 (자동/강제 변환까지) (1) | 2025.06.01 |