비교:
- 기본 데이터 유형 배열
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(); // 실제 객체 유형에 따라 attack 메서드가 다를 수 있음.
}
- 원래 클래스의 기능에 접근하려면 명시적 형변환이 필요합니다.
instanceof연산자는 객체의 원래 클래스를 판별하여 불리언 결과로 반환합니다.
if (unit[0] instanceof Army) {
// Army 클래스에 특정한 작업 수행.
}
예시
class Unit {
protected String name;
public Unit(String name) {
this.name = name;
}
public void attack() {
System.out.println(name + "이(가) 공격합니다!");
}
}
class Army extends Unit {
public Army(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(name + "이(가) 지상 공격을 실시합니다!");
}
public void specialCommand() {
System.out.println(name + " 특수 명령을 실행합니다!");
}
}
class Navy extends Unit {
public Navy(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(name + "이(가) 해상 공격을 실시합니다!");
}
public void navalOperation() {
System.out.println(name + " 해군 작전을 수행합니다!");
}
}
class AirForce extends Unit {
public AirForce(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(name + "이(가) 공중 공격을 실행합니다!");
}
public void airSuperiority() {
System.out.println(name + " 공군이 공중 우위를 확보합니다!");
}
}
public class Main {
public static void main(String[] args) {
// 객체 배열 생성 및 할당
Unit[] units = new Unit[3];
units[0] = new Army("육군");
units[1] = new Navy("해군");
units[2] = new AirForce("공군");
// 객체 배열을 통한 일괄 처리
for (Unit unit : units) {
unit.attack();
}
// 특정 자식 클래스의 기능 사용
if (units[0] instanceof Army) {
((Army) units[0]).specialCommand();
}
}
}
결과
육군이(가) 지상 공격을 실시합니다!
해군이(가) 해상 공격을 실시합니다!
공군이(가) 공중 공격을 실행합니다!
육군 특수 명령을 실행합니다!