최대 1 분 소요

우리는 상속을 공부할 때 하위클래스에서 상위클래스로 형 변환되는 경우를 배웠습니다.
(업 캐스팅 (묵시적))

이번 포스트에서는 하위클래스로 형 변환이 되는 다운캐스팅에 대해 공부하겠습니다.

1. 다운캐스팅

다운캐스팅을 사용하는 경우는
묵시적으로 상위클래스로 형 변환된 인스턴스가 원래 자료형인 하위 클래스로
변환되어야 하는 경우 사용합니다.

업캐스팅과는 다르게 명시적으로 이루어집니다.

Customer vc = new VIPCustomer(); //묵시적 (업캐스팅)
VIPCustomer vCustomer = (VIPCustomer)vc; //명시적 (다운캐스팅)

즉 형변환이 된 상태에서 다시 원래 자신의 데이터 타입으로 돌아가는게 다운캐스팅입니다.

이 경우 vCustomer 앞의 VIPCustomer 클래스 타입과 괄호 안의 VIPCustomer,
두개만 확인하기 때문에 명시적으로 적어준 클래스 타입이 인스턴스 타입과 완전히 다른 경우
에러가 발생할 수 있습니다.

2. Instanceof

위에서 설명한 에러를 방지하기 위해 Instanceof 키워드를 사용합니다.

instanceof

Animal hAnimal = new Human();
if(hAnimal instanceof Human){
    Human human = (Human)hAnimal;
}

위의 코드는 hAnimal 인스턴스 자료형이 Human형 이라면
인스턴스 hAnimal을 Human형으로 다운캐스팅하는 코드입니다.

즉 instanceof는 어느 객체가 정말 해당 타입의 객체인지 확인하고
true, false를 반환합니다.

상위클래스에서 오버라이딩으로 해결할 수 있는 경우는
다형성을 사용하는게 좋습니다.

오버라이딩이 정 안되는 경우에만 다운캐스팅을 사용하고
다운캐스팅의 안정성을 높이기 위해 instanceof를 사용합니다.

태그:

카테고리:

업데이트:

댓글남기기