본문 바로가기

프로그래밍언어/Java

[Java 기본] 배열

배열 도입


클래스를 사용하여 학생 데이터를 구조적으로 이해하기 쉽게 변경할 수 있었다. 

        System.out.println("이름:" + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
        System.out.println("이름:" + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);

 

하지만 코드를 보면 데이터를 출력하는 부분이 반복적으로 쓰이고 있다. 학생이 추가되면 코드도 늘어날 것이다. 배열을 사용하여 이 코드를 개선해보자.

 

 

배열을 사용한 코드


 

 

public class ClassStart4 {
    public static void main(String[] args) {
        
        Student student1 = new Student(); // 학생을 실제 메모리에 만든다.
        student1.name = "학생1";
        student1.age = 14;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 15;
        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);
    }
}

 

1. Student 클래스를 기반으로 student1, student2 인스턴스를 생성하고, 값을 할당한다.

2. Student를 담을 수 있는 배열을 생성한다.

  • student1, 2는 참조값(주소)를 가지고 있다. 
  • 배열도 마찬가지로 참조값을 보관한다. 
  • 참조값을 대입하기 전에는 null로 초기화 된다.
  • 배열을 생성하면 메모리에 공간이 생긴다. students 역시 배열의 주소값을 담고 있다. 
  • 배열에 값을 대입하면, 배열의 0번 인덱스에는 student1의 주소값이 1번 인덱스에는 student2의 주소값이 담기게 된다. 
  • 자바에서 변수의 대입(=)은 변수에 들어있는 값을 복사해서 전달한다.

 

 

배열 도입 - 리팩토링


배열을 도입했으니 코드를 리팩토링해서 반복되는 출력문을 개선해보자.

 

    public static void main(String[] args) {
        Student student1 = new Student(); // 학생을 실제 메모리에 만든다.
        student1.name = "학생1";
        student1.age = 14;
        student1.grade = 90;

        Student student2 = new Student();
        student2.name = "학생2";
        student2.age = 15;
        student2.grade = 80;

        Student[] students = {student1, student2};

        for(Student s : students) { //향상된 for문
            System.out.println("이름:" + s.name + " 나이: " + s.age + " 성적: " + s.grade);
        }
    }