[이것이 자바다] 04. 참조타입
안녕하세요. 이번에는 자바의 참조타입에 대해 정리한 내용입니다.
1. 데이터 타입
- 기본 타입
- 변수 공간(스택)에 실제 값 직접 저장합니다.
- 참조 타입
- 실제 데이터 힙(Heap) 영역에 생성, 변수 공간(스택)에 힙의 메모리 주소 저장합니다.
2. 메모리 사용 방식: == / .equals()
==(등가 비교 연산자): 두 변수의 값 비교합니다.- 기본 타입
- 변수 안의 실제 값 비교
- 참조 타입
- 변수 안의 주소값 비교
- 두 변수가 가리키는 객체 확인
- 기본 타입
.equals()(메서드): 참조 변수의 객체 내부 내용 비교합니다.
3. String 타입
String(참조 타입)- 기본 타입처럼 사용되는 특별한 취급을 받습니다.
문자열 리터럴 / new 연산자
- 문자열 리터럴 (
String str = "문자열";)- 힙 영역 안: 문자열 상수 풀 (특별 공간) 생성합니다.
- 상수 풀에 문자열 존재 확인, 없으면 새로 생성 / 있으면 기존 주소 사용합니다.
String s1 = "문자열";/String s2 = "문자열";>> 같은 주소 (s1 == s2>>true)
new연산자 (String s3 = new String("문자열");):- 무조건 힙 영역에 새로운 객체 생성합니다.
String s3 = new String("문자열");/String s4 = new String("문자열");>> 서로 다른 주소(s3 == s4->false)
- 무조건 힙 영역에 새로운 객체 생성합니다.
4. null과 NullPointerException
null- 참조 변수가 아무런 객체도 가리키고 있지 않음을 의미합니다.
NullPointerExceptionnull상태에서 뭔가 실행할 때 발생합니다.
- 방어 코드
- 참조 변수 사용 전
null확인습관 (if (변수 != null) { ... })이 필요합니다.
- 참조 변수 사용 전
5. 배열
- 같은 타입 데이터의 묶음입니다.
- 배열 == 객체
- 배열 == 참조 타입
- 배열 변수(스택)에 힙의 실제 배열 데이터의 주소값 저장합니다.
- 선언 / 생성
// 선언
int[] arr;
// 생성 (힙에 공간 할당됨)
arr = new int[개수];
// 선언, 생성 동시
String[] arr = new String[] {"문", "자", "열"};
String[] arr = {"문", "자", "열"}; // 간결
- 배열 복사
- 얕은 복사
int[] arr2 = arr1;- 주소값만 복사
- 두 변수 같은 배열 객체 참조합니다.
- 깊은 복사 :
System.arraycopy()/for문/...- 배열 요소 하나하나 새로운 배열에 복사
- 두 배열 다른 독립적인 객체입니다.
- 얕은 복사
6. 열거 타입
- 상수의 안전한 집합입니다.
- 한정된 값들만을 갖는 타입 정의입니다.
- 타입 안전성
- 정해진 값만 사용 하도록 컴파일러 강제
- 문자열 / 숫자 사용보다 훨씬 안전
- 가독성이 좋습니다.
- 타입 안전성
- 사실 특별한 형태의 클래스이며 요소는 해당 클래스의 고유 객체입니다.
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch6.상속 (1) | 2025.12.26 |
|---|---|
| [이것이 자바다].ch5.클래스 (0) | 2025.12.26 |
| [이것이 자바다].ch3.조건문과 반복문 (0) | 2025.12.25 |
| [이것이 자바다].ch2.연산자 (0) | 2025.09.28 |
| [이것이 자바다].ch1.변수와 타입 (0) | 2025.09.28 |