참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 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 |