본문 바로가기

Java의 정석

instanceof 연산자

참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자를 사용한다. 주로 조건문에 사용되며 "참조변수 instanceof 타입(클래스명)" 형태로 위치하고 true 또는 false를 반환한다.

public class instanceofExam {
    void test(Tv t) {
        if (t instanceof SmartTv) { // 형변환 가능 여부 판단
            SmartTv st = (SmartTv) t; // 형변환
            st.power();
        };
    }
}

class Tv {
    boolean power;
    int channel;

    void power() { power = !power; }
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}

class SmartTv extends Tv {
    String text;
    void caption() {}
}

메서드 내에서 정확히 어떤 인스턴스인지 판단하지 못하기 때문에 instanceof 연산자로 참조변수 t가 가리키고 있는 인스턴스의 타입을 체크하고 적절하게 형 변환 후 작업해야 한다.

조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있기 때문에 참조변수의 타입과 인스턴스의 타입이 항상 일치하지는 않는다. 조상타입의 참조변수로는 실제 인스턴스의 멤버들을 모두 사용할 수 없기 때문에 실제 인스턴스와 같은 타입의 참조변수로 형변환을 해야만 인스턴스의 모든 멤버들을 사용할 수 있다.

어떤 타입에 대한 instanceof 연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.

'Java의 정석' 카테고리의 다른 글

객체를 배열로 다루기  (0) 2022.04.13
매개변수의 다형성  (0) 2022.04.12
참조변수의 형변환  (0) 2022.04.08
다형성(polymorphism)  (0) 2022.04.07
접근 제어자(access modifier)  (0) 2022.04.06