1. 객체 배열이란?
: 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러개를 그룹화할 수 있음
int[] data = new int[2];
Army[] data = new Army[3];
- 각 경우에 대한 배열의 요소 할당 처리
-> 일반 데이터 형은 단순히 값을 대입하지만, 객체 배열은 new를 사용하여 객체를 할당
- 일반 데이터 형 배열의 경우
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[3];
unit[1] = new Navy();
unit[2] = new AirForce();
- 일괄 처리가 가능
-> 서로 다른 객체를 부모 형태의 배열에 담게 되면 반복문으로 일괄 처리 가능
-> 이 때 배열의 각 요소를 통해 사용하는 메서드가 Override되어 있을 경우, 부모의 메서드가 아니라 자신이 재정의 기능을 뜻 함
for(int i=0 | i<unit.length; i++) {
unit[i].attack();
}
< 객체 배열의 활용>
1. 원래 기능으로 복귀하기
- 배열의 각 요소가 확정한 기능을 사용하기 위해서는 원래의 클래스 형태로 명시적 형변환이 이루저짐
- 하지만 반복적으로 처리되는 과정에서 몇 번째 요소가 어떤 클래스에서 최초 생성되었는지를 판단하기란 쉽지 않음
2. instanceof 연산자의 사용
- instanceof 연산자는 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과를 반환
if(unit[0] instanceof Army) {
Army temp = (Army)unit[0];
} else if(unit[i] instanceof Navy) {
Navy temp = (Navy)unit[i];
}