본문 바로가기

프로그래밍언어/Java

[Java 기본] instanceof

instanceof


다형성에서 참조형 변수는 다양한 자식을 대상으로 참조할 수 있다. 그런데 참조하는 대상이 다양하기 때문에 어떤 인스턴스를 참조하고 있는지 확인하기 어렵다.

 

Parent parent1 = new Parent()
Parent parent2 = new Child()

=> parent1, 2 가 참조하는 인스턴스의 타입을 확인하려면 instanceof 키워드를 사용하면 된다. 

 

예제


 

public class CastingMain5 {

    // 다운캐스팅을 자동으로 하지 않는 이유
    public static void main(String[] args) {
        Parent parent1 = new Parent();
        System.out.println("parent1 호출");
        call(parent1);

        Parent parent2 = new Child();
        System.out.println("parent2 호출");
        call(parent2);
    }

    private static void call(Parent parent) {
        parent.parentMethod();

        if(parent instanceof Child) {
            System.out.println("Child 인스턴스");
            Child child = (Child) parent;
            child.childMethod();
        } else {
            System.out.println("Child 인스턴스 아님");
        }
    }
}

 

실행 결과

 

자바 16 - Pattern Matching for instanceof


자바 16부터는 instanceof를 사용하면서 동시에 변수를 선언할 수 있다. 

 

 if(parent instanceof Child ) {
    System.out.println("Child 인스턴스");
    Child child = (Child) parent;
    child.childMethod();
 }

=> 이 코드를 다음과 같이 쓸 수 있다. 

 if(parent instanceof Child child) {
    System.out.println("Child 인스턴스");
    child.childMethod();
 }

 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.