[JAVA] 객체 배열 & instanceof

:-)·2022년 4월 14일
0

☕ JAVA

목록 보기
5/15
post-thumbnail

📝 객체 배열

  • 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러 개를
    그룹화 할 수 있다.
  • 동일한 클래스의 객체는 배열로 묶어서 여러 개를 한꺼번에 제어할 수 있다.



일반 데이터 형의 배열과 객체 배열 비교

  1. 생성
   - 일반 데이터형의 배열
	int[] data = new int[3];
    
	- 객체 배열의 경우
	Army[] data = new army[3];
  1. 배열의 요소 할당처리
  - 일반 데이터 형 배열의 경우
      data[0] = 10;
      data[1] = 20;
      data[2] = 35;

  - 객체 배열의 경우
      Army a1 = new Army();
      data[0] = new Army();
      data[1] = new Army();
      data[2] = new Army();
  • 일반 데이터 형은 단순히 값을 대입하지만,
    객체 배열은 'new'를 사용하여 객체를 할당해야 한다.

객체 배열의 활용

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

instanceof 연산자

  • 객체 타입 확인하는 연산자

  • 배열의 각 요소가 확장한 기능을 사용하기 위해서는 원래의 클래스 형태로
    명시적 형변환이 이루어 져야 한다.
    하지만 몇번째 요소가 어떤 클래스에서 최초로 생성되었는지 판단하기 어렵다.

  • 이 경우 instanceof 연산자를 사용하면 어떤 객체에 대한 출처를 판단하여
    boolean형으로 결과를 반환할 수 있다.
class Parent{}
class Child extends Parent{}

public class Main {

	public static void main(String[] args) {
		Parent p = new Parent();
		Child c = new Child();
		
		System.out.println(p instanceof Parent);		
		System.out.println(p instanceof Child);				
		System.out.println(c instanceof Parent);			
		System.out.println(c instanceof Child);			

	}

}

👉 실행 결과

true
false
true
true



✍ 객체 배열 & instanceof 코드 예시) - <객체 형변환 글에 있는 코드 참고>

public class Main {

	public static void main(String[] args) {
		// 부대지정
		Unit[] units = new Unit[5];
		
		units[0] = new AirForce("공군1호");
		units[1] = new AirForce("공군2호");
		units[2] = new Navy("해군1호");
		units[3] = new Army("육군1호");
		units[4] = new Army("육군2호");

		// 부대 일괄 공격 attak();
		for (int i = 0; i < units.length; i++) {
			units[i].attack();
			
			// 각 기능의 고유한 기능 호출
			if (units[i] instanceof Army) {
				Army temp1 = (Army)units[i];
				temp1.tank();
			} 
			
			if (units[i] instanceof Navy) {
				Navy temp2 = (Navy)units[i];
				temp2.nucleus();
			} 
			
			if (units[i] instanceof AirForce) {
				AirForce temp3 = (AirForce)units[i];
				temp3.bombing();
			}
			
			System.out.println("-----------------------------");
		}
		
	}

}

👉 실행 결과

공군1>>> 공격준비 
공군1>> 이륙
공군1>> 공중공격 실행
공군1>> 폭격
-----------------------------
공군2>>> 공격준비 
공군2>> 이륙
공군2>> 공중공격 실행
공군2>> 폭격
-----------------------------
해군1>>> 공격준비 
해군1>> 어뢰발사
해군1>> 지상 상륙
해군1>> 핵미사일
-----------------------------
육군1>>> 공격준비 
육군1>> 지상공격 실행
육군1>> 탱크공격
-----------------------------
육군2>>> 공격준비 
육군2>> 지상공격 실행
육군2>> 탱크공격
-----------------------------

0개의 댓글