Java

[인프런] 배열

sejin2 2024. 5. 20. 16:34

배열 도입 - 시작

클래스와 객체 덕분에 학생 데이터를 구조적으로 이해하기 쉽게 변경할 수 있었다. 하지만 학생을 출력하는 부분에 있어 새로운 학생이 추가될 때마다 출력되는 부분을 함께 추가해야한다는 불편함이 있다.

배열을 사용하면 특정 타입을 연속한 데이터 구조로 묶어서 편리하게 관리할 수 있다.
Studnet 클래스를 사용한 변수들도 Student 타입이기 때문에 학생도 배열을 사용해서 하나의 데이터 구조로 묶어서 관리할 수 있다. 

배열에 참조값 대입

- Stundent 변수를 2개 보관할 수 있는 사이즈 2의 배열을 만든다.
- Student 타입의 변수는 Student 인스턴스의 참조값을 보관한다. Student 배열의 각 항목도 Student 타입의 변수일 뿐이다. 따라서 Studnet 타입의 참조값을 보관한다. 
- 배열에는 아직 참조값을 대입하지 않았기 때문에 참조값이 없다는 의미의 null 값으로 초기화 된다.

자바에서 대입은 항상 변수에 들어있는 값을 복사해서 전달한다. 
student1, student2에는 참조값이 보관되어 있다. 따라서 이 참조값이 배열에 저장된다. 또는 studnet1, studnet2에 보관된 참조값을 읽고 복사해서 배열에 대입한다고 표현한다. 

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]; // 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);
    }
}

 

※주의
=> 변수에는 인스턴스 자체가 들어있는 것이 아니라 인스턴스의 위치를 가리키는 참조값이 들어있다. 
따라서 대입( = )시에 인스턴스가 복사되는 것이 아니라 참조 값이 복사된다. 

배열에 들어있는 객체 사용

배열에 들어 있는 객체를 사용하려면 먼저 배열에 접근한 다음 객체에 접근하면 된다. 
for문 사용 

public class ClassStart5 {
    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[] {student1, student2}; 
        
        for (int i = 0; i < students.length; i ++ ) {
            System.out.println("이름" + students[i].name + "나이" + students[i].age + "등급" + students[i].grade);

        }
    }
}

for문 최적화 - 반복 요소를 변수에 담아서 처리

for (int i = 0; i < students.length; i ++ ) {
    Student s = students[i];
    System.out.println("이름" + s.name + "나이" + s.age + "등급" + s.grade);
}

향상된 for문

for (Student s : students) {
    System.out.println("이름" + s.name + "나이" + s.age + "등급" + s.grade);
}

 

 

공부 내용: [인프런] 김영한의 실전 자바 - 기본편