[Java] 다운캐스팅, instanceof

ss9909·2022년 11월 20일
0

Java

목록 보기
3/5

다운캐스팅

상위클래스로 형변환 된 인스턴스의 자료형을 하위 클래스 자료형으로 변환하는 것

instanceof

상속관계를 생각해보면 하위 클래스의 인스턴스는 모두 상위클래스의 인스턴스라 해도 맞지만, 상위 클래스의 인스턴스는 하위 클래스의 인스턴스라고 할 수 없다.
∴ 다운캐스팅 전 인스턴스의 원래 자료형을 확인해주는 것이 좋다.

원래 자료형을 확인하는 예약어가 instanceof다.

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

참조 변수 hAnimal은 원래 Human형으로 생성되었지만, Animal 형으로 업캐스팅되었다. instanceof는 왼쪽에 있는 변수의 원래 인스턴스 형이 오른쪽 클래스 자료형인가를 확인하는 예약어다. instanceof의 반환 값이 true면 if 내부에 선언한대로 다운캐스팅을 진행한다. 이때, 다운캐스팅은 (Human)hAnimal과 같이 명시적으로 자료형을 선언해주어야 한다.

원래 인스턴스의 자료형이 Human형이 아니게 코딩을 하더라도 컴파일 오류는 발생하지 않는다. 변수 human의 자료형과 다운캐스팅을 하는 hAnimal의 명시적으로 선언된 자료형이 동일하여 컴파일 오류는 발생하지 않게 된다.

Animal hAnimal = new monkey();
Human human = (Huaman)hAnimal;

컴파일 오류는 발생하지 않지만 해당 코드를 실행하면 실행오류가 발생한다.
ClassCastException이 발생할 것이다.
따라서 참조변수의 원래 인스턴스를 정확히 확인하고 다운캐스팅을 하는 편이 안전하며, 확인을 위해 instanceof를 사용하는 것이다.

REF

Do it! 자바 프로그래밍

profile
이름 짓는 게 어려운 사람

0개의 댓글