✅ 핵심 요약
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 발생 |
'Java' 카테고리의 다른 글
[Java] Composition vs Inheritance — 언제 써야 하나? (0) | 2025.04.02 |
---|---|
[Java] 문자열을 검사하는 방법 - String isEmpty(), isBlank(), null 체크 (0) | 2025.04.01 |
[Java] 객체(Object), 클래스(Class), 그리고 메서드(Method)와 속성(Property, 필드) (0) | 2025.03.26 |
[Java] 정렬 알고리즘 (0) | 2025.03.25 |
[Java] 자바 메인 함수(Main Function) (0) | 2025.03.24 |
댓글