본문 바로가기
Java

[Java] Java에서 배열 생성과 객체 생성의 차이 정리

by clolee 2025. 4. 2.

✅ 핵심 요약

Student[] students = new Student[10];
  • 🔹 배열 객체를 생성한 것 (크기 10짜리)
  • 🔹 아직 Student 객체는 하나도 존재하지 않음
  • 🔹 내부에는 null 값이 10개 들어 있음
students[0] = new Student();
  • 🔹 진짜로 Student 객체를 생성해서 배열의 첫 번째 칸에 넣는 것

✅ 1. 배열 생성: new는 "공간"만 만든다

Student[] students = new Student[3];
  • students는 참조형 배열이며,
  • 내부에는 Student 객체가 아닌 null이 3개 들어 있음:
students = [null, null, null]

즉, "객체를 담을 수 있는 칸만 만든 상태"이고,
각 칸에 실제 객체를 넣으려면 따로 new 해야 함.


✅ 2. 객체 생성: 진짜 객체를 만드는 new

students[0] = new Student();
  • new Student()는 실제 메모리에 Student 객체 하나를 생성
  • 이 객체의 주소가 students[0]에 저장됨

이렇게 해야 비로소 students[0].name 같은 접근이 가능함
(안 하면 NullPointerException 터짐)


✅ new 키워드가 사용되는 주요 경우

상황 예시 설명
✅ 배열 생성 int[] arr = new int[5]; 해당 타입의 공간을 만듦
✅ 객체 생성 Student s = new Student(); 클래스의 인스턴스를 생성
✅ 이중 배열 생성 int[][] mat = new int[3][4]; 2차원 공간을 생성
✅ 컬렉션 객체 생성 List<String> list = new ArrayList<>(); 인터페이스 → 구현체 생성

🧠 이해를 돕는 비유

Student[] students = new Student[3];
  • 이것은 학생이 앉을 3개의 의자를 만드는 것
  • 의자만 있을 뿐 앉은 사람(객체) 은 없음
students[0] = new Student();
  • 이제 의자에 학생 한 명을 앉힌 것
  • 즉, 객체가 진짜로 메모리에 존재하고 사용 가능해짐

✅ 잘못된 접근 예 (주의!)

Student[] students = new Student[3];
students[0].name = "홍길동"; // ❌ NullPointerException

students[0]은 아직 null이기 때문에 객체를 먼저 생성해야 합니다.


✅ 올바른 객체 생성 및 저장 순서

Student[] students = new Student[3]; // 배열 공간 생성

for (int i = 0; i < students.length; i++) {
    students[i] = new Student();     // 각 칸에 객체 생성 및 할당
}

✅ 요약

코드 의미
new Type[n] 객체를 n개 담을 수 있는 배열 공간 생성 (값은 null)
new ClassName() 실제 객체 1개 생성
배열 만들고 객체 안 만들면? null로 채워져 있음. → 사용 시 NullPointerException 발생

댓글