Language/JAVA

[이것이 자바다].ch4.참조타입

JSJH._. 2025. 12. 25. 21:22

[이것이 자바다] 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. nullNullPointerException

  • null
    • 참조 변수가 아무런 객체도 가리키고 있지 않음을 의미합니다.
  • NullPointerException
    • null 상태에서 뭔가 실행할 때 발생합니다.
  • 방어 코드
    • 참조 변수 사용 전 null 확인습관 (if (변수 != null) { ... })이 필요합니다.

5. 배열

  • 같은 타입 데이터의 묶음입니다.
  • 배열 == 객체
    • 배열 == 참조 타입
    • 배열 변수(스택)에 힙의 실제 배열 데이터의 주소값 저장합니다.
  • 선언 / 생성
// 선언
int[] arr;
// 생성 (힙에 공간 할당됨)
arr = new int[개수];
// 선언, 생성 동시
String[] arr = new String[] {"문", "자", "열"};
String[] arr = {"문", "자", "열"}; // 간결
  • 배열 복사
    • 얕은 복사 int[] arr2 = arr1;
      • 주소값만 복사
      • 두 변수 같은 배열 객체 참조합니다.
    • 깊은 복사 : System.arraycopy()/for문/...
      • 배열 요소 하나하나 새로운 배열에 복사
      • 두 배열 다른 독립적인 객체입니다.

6. 열거 타입

  • 상수의 안전한 집합입니다.
  • 한정된 값들만을 갖는 타입 정의입니다.
    • 타입 안전성
      • 정해진 값만 사용 하도록 컴파일러 강제
      • 문자열 / 숫자 사용보다 훨씬 안전
    • 가독성이 좋습니다.
  • 사실 특별한 형태의 클래스이며 요소는 해당 클래스의 고유 객체입니다.

감사합니다.