[Java] instanceof

Published: by Creative Commons Licence

instanceof는 자바에서 제공하는 연산자의 일종으로, 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용한다.

A instanceof b // A가 B클래스로 만들어진 인스턴지인지 여부를 boolean 값으로 반환

instanceof 연산자는 실제 인스턴스와 일치하는 타입의 연산 이외에 조상타입의 연산에도 true를 결과로 반환한다.

가령 다음과 같을 때 :

class Parent {
    protected String txt = "하이";
}

class Child extends Parent {
    public void sayWhoyouare() {
        System.out.println("Class Child");
    }
}

class Child2 extends Parent {
    public void sayWhoyouare() {
        System.out.println("Class Child2");
    }    
}

Child 클래스는 Parent 클래스를 상속하며 Parent 클래스는 Object 클래스를 상속하니 모두 true로 출력된다.

public class MainTest {
    public static void main(String[] args) {

        Child child = new Child();

        System.out.println(child instanceof Child); // true
        System.out.println(child instanceof Parent); // true
        System.out.println(child instanceof Object); // true
    }
}

여기서 instanceof 연산의 결과값이 true 일 경우는 곧 타입 변환이 가능하다는 것을 알 수 있다.

public class MainTest {
    public static void main(String[] args) {

//        Parent parent = new Child();
        Parent parent = new Child2();
        m01(parent);

    }

    public static void m01(Parent parent) {

        if (parent instanceof Child) {
            Child child = (Child)parent;
            child.sayWhoyouare();

        } else if (parent instanceof Child2) {
            Child2 child2 = (Child2)parent;
            child2.sayWhoyouare();
        }
    }
}