객체 배열과 다형성
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();
지금까지의 내용 정리
객체 형변환: 같은 부모 클래스에서 파생된 서로 다른 자식 클래스의 객체들은 부모 형태로 암묵적 형변환되어 일관된 형식으로 사용 가능합니다.
객체 배열: 동일한 클래스의 객체는 배열로 묶어서 여러 개를 한꺼번에 제어할 수 있습니다.
부모 클래스의 배열에 자식 클래스의 객체를 넣기
부모 클래스로 배열을 생성하면 모든 자식 클래스의 객체를 포함할 수 있습니다.
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();
}
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 + " >> 공격 준비");
}
}