본문 바로가기
JAVA

JAVA(객체형변환, 객체배열)

by 글로리. 2020. 6. 10.

 

객체 형변환

// 형변환 규칙
부모클래스 객체이름 = new 자식클래스();



  • 객체 참조변수의 경우에도 형변환이 이루어짐.
  • 위 소스코드에서 왼쪽 항(Parent)과 오른쪽 항(Child)의 객체 유형이 다른 경우,
    서로 상속관계에 있고 왼쪽객체(Parent)가 오른쪽 객체(Child)의 상위 클래스인 경우에만 암묵적 형변환 이 일어난다.

암묵적 형변환

  • 암묵적 형변환이 되면 자식클래스가 부모클래스에게 상속받은 기능만 사용하도록 제한
  • 주의할 점 : 원래 자식클래스의 기능을 사용하지못하게 하는것이지 없애는것 은 아니다.

명시적 형변환

// 명시적 형변환 방법
부모클래스 객체이름 = (부모클래스) 자식클래스;



  • 부모클래스의 객체를 자식클래스 형태로 변환
  • 명시적 형변환 조건
    • 객체가 최초 생성될 때 자식클래스형태로 생성, 부모클래스 형태로 암묵적 형변환이 된 상태를
      다시 원래의 자식클래스로 되돌릴 경우에만 가능.
ChildClass child1 = new ChildClass();
ParentClass parent = child1;
ChildClass child2 = (ChildClass) parent;



명시적 형변환이 불가능한 경우

// 최초 객체생성이 부모형태로 만들어진 경우
Unit u = new Unit();
Army army = (Army) u;

// 최초 생성된 것과 다른 형식으로 변환하는 것은 불가능 하다.
Army army = new Army();
Unit u = army;
Navy navy = (Navy) u;



  • 위 두경우 모두 문법적 오류는 아니기 때문에 이클립스에서는 에러를 검출하지 못하지만
    프로그램을 실행했을 경우에는 에러발생.

객체 배열

  • 일반 데이터 타입의 배열과 동일한 개념으로 같은 클래스의 객체 여러개를 그룹화 가능

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

일반 데이터 형 배열의 경우 객체 배열의 경우
int[] data = new int[3]; Army[] data = new Army[3];
배열의 요소 할당처리  
일반 데이터형 배열의 경우 객체 배열의 경우
data[0] = 1;
data[1] = 1;
data[2] = 1;
data[0] = new Army();
data[1] = new Army();
data[2] = new Army();

객체 배열의 활용

1. 일괄처리 가능

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

2. 원래의 기능으로 복귀

instanceof 연산자는 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과 반환

// instanceof 연산자의 사용(1)
if (unit[0] instanceof Army) {
    Army temp = (Army) unit[0];
}

// instanceof 연산자의 사용(2)
// 반복문 안에서 사용할 경우 배열의 크기, 인덱스의 위치에 종속되지 않고 배열에 속해있는 모든객체에 대해 처리가능.
for (int i=0; i < units.length; i++) {
    if (units[i] instanceof Army) {
        Army a = (Army) units[i];
        a.tank();
    }
    else if (units[i] instanceof Navy) {
        Navy n = (Navy) units[i];
        n.nucleus();
    }
    else {
        AirForce f = (AirForce) units[i];
    }
}

'JAVA' 카테고리의 다른 글

JAVA (Static, 익명클래스)  (0) 2020.06.11
JAVA(추상화, 인터페이스)  (0) 2020.06.10
JAVA(상속성, 다형성)  (0) 2020.06.09
JAVA(자바빈즈(Java Beans), 은닉성, 상속성)  (0) 2020.06.09
JAVA(클래스, 객체, 생성자)  (0) 2020.06.04

댓글