본문 바로가기

java 공부/객체지향 with 김영한

[실전자바-기본편]3. 클래스 배열 도입

클래스를 사용하면서 객체를 생성하고 정보를 저장하는 것이 수월해졌다.

 

그런데 출력부분을 보면,

System.out.println("이름:" + Persons[0].name + " 나이:" + Persons[0].age + " 몸무게:" + Persons[0].weight);
System.out.println("이름:" + Persons[1].name + " 나이:" + Persons[1].age + " 몸무게:" + Persons[1].weight);

매번 새로운 정보가 추가될 때 마다 출력하는 부분도 함께 추가해야 한다.

이를 위하여 배열을 사용해서 특정 타입을 연속한 구조로 묶어서 편리하게 관리해보자.

 

클래스 배열

package class1;

public class ClassStart4 {

    public static void main(String[] args) {
        Person Person1 = new Person(); //x001
        Person1.name = "철수";
        Person1.age = 15;
        Person1.weight = 90;

        Person Person2 = new Person(); //x002
        Person2.name = "미영";
        Person2.age = 16;
        Person2.weight = 50;

        Person[] Persons = new Person[2];
        Persons[0] = Person1;
        Persons[1] = Person2;

        System.out.println("이름:" + Persons[0].name + " 나이:" + Persons[0].age + " 몸무게:" + Persons[0].weight);
        System.out.println("이름:" + Persons[1].name + " 나이:" + Persons[1].age + " 몸무게:" + Persons[1].weight);

    }
}

 

  • Person 변수를 2개 보관할 수 있는 배열을 만든다.
  • Person 타입의 변수Person 인스턴스의 참조값을 보관한다. 
  • Persons 배열에는 Person1, Person2의 참조값을 보관한다.
  • 배열에는 처음에는 null값으로 초기화된다.

 

배열에 객체 보관

// 자바에서 대입은 항상 변수에 들어 있는 값을 복사
Persons[0] = Person1;
Persons[1] = Person2;

 

※자바에서 대입은 항상 변수에 들어 있는 값을 복사한다※

 

배열 또한 어떠한 메모리공간을 할당받고 참조값이 생긴다.

변수에는 인스턴스 자체가 들어있는 것이 아니라 인스턴스의 위치를 가리키는 참조값이 들어있는 것이다. 

인스턴스가 복사되는 것이 아니라 참조값이 복사되어 담긴다. 

 

 

배열에 있는 객체 사용

 

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

System.out.println(Persons[0].name); // 배열 접근 시작
System.out.println(x005[1].name); // [0]을 사용해서 x005 배열의 0번 요소에 접근
System.out.println(x001.name); // . 을 이용하여 참조값으로 객체에 접근
System.out.println("철수");

 

  1. Persons[0].name : 배열 키워드로 메모리에 접근
  2. x005[0].name : 배열의 참조값인 x005에 접근
  3. x001.name : x005[0] 내에 들어있던 인스턴스의 참조값인 x001로 접근
  4. "철수" : 출력

 

배열 도입 - 리펙토링

 

for문으로 출력해보자.

package class1;

public class ClassStart5 {

    public static void main(String[] args) {
        Person Person1 = new Person(); //x001
        Person1.name = "철수";
        Person1.age = 15;
        Person1.weight = 90;

        Person Person2 = new Person(); //x002
        Person2.name = "미영";
        Person2.age = 16;
        Person2.weight = 50;

        Person[] Persons = new Person[]{Person1, Person2};

        for (int i = 0; i < Persons.length; i++) {
        	Person p = Persons[i];
            System.out.println("이름:" + p.name + " 나이:" + p.age + " 몸무게:" + p.weight);
        }
    }
}

 

이런 방식으로 배열을 반복하며 손쉽게 출력이 가능하다.