객체 배열

전영덕·2023년 1월 31일
0

Java Study

목록 보기
22/36

1. 객체 배열

  • 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러개를 그룹화 할 수 있다.
  • 일반 데이터 형 배열의 경우
	int[ ] dataInt = new int [3];   //int 타입 3칸짜리 배열 
	Army[ ] dataArmy = new Army[3] // Army타입 3칸짜리 배열

2. 배열 할당

= 일반 데이터형은 단순히 값을 대입하지만, 객체 배열은 new라는 키워드를 사용하여 객체를 할당해야 한다.

  • 일반 데이터형 배열
dataInt [ 0 ] = 1;
dataInt [ 1 ] = 2;
dataInt [ 2 ] = 10;
  • 객체 배열
dataArmy[0] = new Army;
dataArmy[1] = new Army;
dataArmy[2] = new Army;

3. 부모클래스의 배열에 자식클래스의 객체를 넣기

  • 객체 형변환과 객체 배열의 조화
  • 배열의 생성이 부모클래스로 지정되었을 경우, 모든 자식 클래스의 객체들은 그 배열에 포함될 수 있다.
	Unit[ ] unit = new Unit[3];
	//배열의 요소 할당 과정에서 암묵적 형변환이 일어난다.
	Unit[0] = new Army; 
	Unit[1] = new Navy;
	Unit[2] = new Airforce;

4. 객체 배열의 활용

  • 일괄처리가 가능해진다.
  • 서로 다른 객체를 부모형태의 배열에 담게 되면, 반복문으로 일괄처리가 가능하다.
  • 이때 배열의 각 요소를 통해서 사용하는 메서드가 Override되어 있을 경우, 부모의 메서드가 아니라 자신이 재정의한 기능을 뜻한다.
	for(int i = 0; i<unit.length; i++){
		unit[i].attack();
	}

5. 원래 기능으로 복귀하기

  • 배열의 각 요소가 확장한 기능을 사용하기 위해서는 원래 클래스 형태로 명시적 형변환이 이루어져야한다.
  • 하지만 반복적으로 처리되는 과정에서 몇 번째 요소가 어떤 클래스에서 최초 생성되었는지를 판단하기란 어렵다.
  • instanceof 연산자 : 어떤 객체에 대한 출처를 판단하여 boolean타입으로 결과를 반환한다.
	if( unit[0] instanceof Army){
		Army temp = (Army)unit[0];
		temp.tank();
	}

0개의 댓글