
배열을 사용하면 특정 타입을 연속한 데이터 구조로 묶어서 편리하게 관리할 수 있다.
Student 클래스를 사용한 변수들도 Student 타입이기 때문에 학생도 배열을 사용해서 하나의 데이터 구조로 묶어서 관리할 수 있다.
Student 타입을 사용하는 배열을 도입해보자.
package class1;
public class ClassStart4 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
System.out.println("이름: " + students[0].name + " 나이: " + students[0].age + " 성적: " + students[0].grade);
System.out.println("이름: " + students[1].name + " 나이: " + students[1].age + " 성적: " + students[1].grade);
}
}
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
Student 클래스를 기반으로 student1, student2 인스턴스를 생성한다. 그리고 필요한 값을 채워둔다.

Student를 담을 수 있는 배열을 생성하고, 해당 배열에 student1, student2 인스턴스를 보관하자.
Student[] students = new Student[2];

Student 변수를 2개 보관할 수 있는 사이즈의 배열을 만든다.Student 타입의 변수는 Student 인스턴스의 참조값을 보관한다. Student 배열의 각각의 항목도 Student 타입의 변수일 뿐이다. 따라서 Student 타입의 참조값을 보관한다.student1, student2 변수를 생각해보면 Student 타입의 참조값을 보관한다.null 값으로 초기화 된다.이제 배열에 객체를 보관하자.
students[0] = student1;
students[1] = student2;
// 자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
students[0] = x001;
students[0] = x002;
student1, student2에는 참조값이 보관되어 있다. 따라서 이 참조값이 배열에 저장된다. 또는 student1, student2에 보관된 참조값을 읽고 복사해서 배열에 대입한다고 표현한다.

이제 배열은 x001, x002의 참조값을 가진다. 참조값을 가지고 있기 때문에 x001(학생1), x002(학생2) Student 인스턴스에 모두 접근할 수 있다.

자바에서 대입은 항상 변수에 들어 있는 값을 복사해서 전달한다.
students[0] = student1;
students[1] = student2;
// 자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
students[0] = x001;
students[0] = x002;
자바에서 변수의 대입(=)은 모두 변수에 들어있는 값을 복사해서 전달하는 것이다. 이 경우 오른쪽 변수인 student1, student2에는 참조값이 들어있다. 그래서 이 값을 복사해서 왼쪽에 있는 배열에 전달한다. 따라서 기존 student1, student2에 들어있던 참조값은 그대로 유지된다.
⛔️ 주의!
변수에는 인스턴스 자체가 들어있는 것이 아니다! 인스턴스의 위치를 가리키는 참조값이 들어있을 뿐이다. 따라서 대입(
=)시에 인스턴스가 복사되는 것이 아니라 참조값만 복사된다.
배열에 들어있는 객체를 사용하려면 먼저 배열에 접근하고, 그 다음에 객체에 접근하면 된다. 이전에 설명한 그림과 코드를 함께 보면 쉽게 이해가 될 것이다.
System.out.println(students[0].name); // 배열 접근 시작
System.out.println(x005[0].name); // [0]를 사용해서 x005 배열의 0번 요소에 접근
System.out.println(x001.name); // .(dot)을 사용해서 참조값으로 객체에 접근
System.out.println("학생1");
System.out.println(students[1].name); // 배열 접근 시작
System.out.println(x005[1].name); // [1]를 사용해서 x005 배열의 1번 요소에 접근
System.out.println(x002.name); // .(dot)을 사용해서 참조값으로 객체에 접근
System.out.println("학생2");