2024-07-22 DAY9

보히·2024년 7월 24일

객체 배열과 다형성
1. 객체 배열
객체 배열은 같은 클래스의 객체 여러 개를 그룹화할 수 있는 배열입니다. 일반 데이터 타입 배열과 동일한 개념으로, 객체를 다룰 때도 배열을 사용합니다.

예시코드1)
int[] data = new int[3];
Army[] data = new Army[3];

일반 데이터 타입 배열
data[0] = 1;
data[1] = 2;
data[2] = 3;

객체 배열
data[0] = new Army();
data[1] = new Army();
data[2] = new Army();

  1. 지금까지의 내용 정리
    객체 형변환: 같은 부모 클래스에서 파생된 서로 다른 자식 클래스의 객체들은 부모 형태로 암묵적 형변환되어 일관된 형식으로 사용 가능합니다.
    객체 배열: 동일한 클래스의 객체는 배열로 묶어서 여러 개를 한꺼번에 제어할 수 있습니다.

  2. 부모 클래스의 배열에 자식 클래스의 객체를 넣기
    부모 클래스로 배열을 생성하면 모든 자식 클래스의 객체를 포함할 수 있습니다.

Unit[] unit = new Unit[3];
// 배열의 요소 할당 과정에서 암묵적 형변환이 이루어집니다.
unit[0] = new Army();
unit[1] = new Navy();
unit[2] = new AirForce();

이렇게 하면 배열의 요소들을 반복문으로 일괄 처리할 수 있습니다. 이 때 각 요소가 오버라이드된 메서드를 호출하면, 자식 클래스의 메서드가 실행됩니다.

for(int i = 0; i < unit.length; i++) {
unit[i].attack();
}

  1. 객체 배열의 활용
    4-1. 원래 기능으로 복귀하기
    배열의 각 요소가 특정한 기능을 사용하기 위해서는 원래 클래스 형태로 명시적 형변환이 이루어져야 합니다.

4-2. instanceof 연산자의 사용
instanceof 연산자는 객체의 출처를 판단하여 boolean 형으로 결과를 반환합니다.

if(units[0] instanceof Army) {
Army temp = (Army)unit[0];
} else if(units[i] instanceof Navy) {
Navy temp = (Navy)unit[i];
}

Unit:부모 클래스 Army, Navy, AirForce:자식 클래스 main01:메인 클래스
package boxing;

public class Unit {
private String name;

public Unit(String name) {
    super(); // 최상위 클래스인 Object를 호출
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public void attack() {
    System.out.println(this.name + " >> 공격 준비");
}

}

0개의 댓글