Java Object Class 배열

Student.class 코드

public class Student {
    String name;
    int age;
    int grade;
}

Main.class 코드

Student stduent1 = new Student();
Student stduent2 = new Student();
student1.name = "홍길동"
student1.age = 18
student1.name = "김철수"
student1.age = 15

코드 복습으로 구조적으로 클래스로 틀을 만들고 객체 student1, student2를 생성할 수 있었다.
객체는 각 Student의 정보를 담고 있으므로 이름, 나이 데이터를 저장할 수 있다.

그러나 출력할 때 아래 코드처럼 student1 student2 각각 입력해야하는 문제점이 있는데,
이러한 문제점은 배열로 만들어 관리하면 출력도 손쉽게 사용할 수 있다.

System.out.println("이름: " + student1.name + "나이: " + student1.age);
System.out.println("이름: " + student2.name + "나이: " + student2.age);
  • 코드에서 각각 변수이름 출력하여 불필요한 중복코드를 발생시키고 있다.
  • 학생 수가 늘어나면 중복 코드가 늘어난다.

클래스 배열 사용

사용자 지정 타입의 클래스 객체를 연속된 데이터로 생성하도록 배열을 만든다.

클래스 배열 선언은 다음과 같이 선언해주면 된다.

Student[] students;
students = new Stduent[2];

Main.class 클래스 배열 객체 students 추가하기

Student stduent1 = new Student();
Student stduent2 = new Student();
student1.name = "홍길동"
student1.age = 18
student2.name = "김철수"
student2.age = 15

Student[] students = new Stduent[2];
students[0] = student1;
students[1] = student2;
  • Student[] students = new Student[2]; 2개의 Student 클래스 타입을 가진 배열 students 생성한다.
  • 이제 변수 students는 배열 2개를 보관할 수 있다.
  • students 배열에 보관할 때 Student 클래스로 정의한 타입만 참조값으로 보관할 수 있다.
💡
students 배열의 @b4c966a 참조 값은 null만 갖고 있으니 초기화하여 안전하게 사용하도록 한다.

student1, student2 각각 students 배열 객체로 참조값을 보관하기

  • students[0] = student1; 코드처럼생성한 student1 인스턴스를 students배열 첫번째에 참조값을 보관하였다.
  • students[1] = student2; 코드도 students 배열 두 번째 참조값을 보관하도록 한다.
  • @b4c966a[0] 배열에는 이제 student1 인스턴스의 @2f3d3709 참조값을 담고 있다.
  • @b4c966a[1] 배열에는 이제 student2 인스턴스의 @4e50df2e 참조값을 담고 있다.
  • students[0] = student1;코드
    • student1의 참조값(@2f4d3709) 복사하여 students[0]; 할당한 모습
  • students[1] = student2; 코드
    • student2의 참조값(@4e50df2e) 복사하여 students[1]; 할당한 모습
💡
!! student1 참조 값만 student[0] 복사하여 할당하였지
앞서 말한 코드에서는 인스턴스 데이터(홍길동, 18)를 복사하여 할당한 것이 아님

배열 students 객체 출력하기

배열에 들어간 객체를 사용하려면 먼저 배열부터 접근한 다음 객체에 접근한다.

Main.class 코드 추가하여 객체 출력

System.out.println("학생1의 이름: " + students[0].name);
System.out.println("학생1의 나이: " + students[0].age);

System.out.println("학생2의 이름: " + students[1].name);
System.out.println("학생2의 나이: " + students[1].age);

students 배열 객체 출력

학생1의 이름: 홍길동
학생1의 나이: 18
학생1의 이름: 김철수
학생1의 나이: 15
  • students[0] 과 같이 배열을 접근하고 dot(.)로 객체 데이터를 가져와 출력하였다.

반복문으로 객체 배열 출력하기

System.out.println(...); 중복으로 코드를 작성한 부분을 반복문을 사용하여 개선한다.

반복문으로 수정된 println();

for (int i = 0; i < students.length; i++) {
            System.out.println("이름: " + students[i].name + ", 나이: " + students[i].age);
        }
  • 이제 학생 수가 늘어나도 println 코드를 추가하지 않아도 된다.