Java/Basic

다형성(polymorphism) - instanceof 연산자

최로이 2021. 3. 31. 01:07

1. instanceof 연산자는 참조변수가 참조하고 있는 실제 타입을 알아보기 위해 사용한다. 주로 조건문에 사용되며 instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치한다. 연산의 결과는 true 또는 false로 반환한다. 이 때 true로 값을 얻는다는 건 참조변수가 검사한 타입으로 형변환이 가능하다는 의미다.

 

2. 형태

참조변수 instanceof 참조타입(클래스명)

 

instanceof 연산자 예제)

class InstanceofTest {
	public static void main(String args[]) {
		FireEngine2 fe = new FireEngine2();

		if(fe instanceof FireEngine2) {
			System.out.println("This is a FireEngine2 instance.");
		} 

		if(fe instanceof Car2) {
			System.out.println("This is a Car2 instance.");
		} 

		if(fe instanceof Object) {
			System.out.println("This is an Object instance.");
		} 

		System.out.println(fe.getClass().getName()); // 클래스의 이름을 출력
	}
} // class
class Car2 {}
class FireEngine2 extends Car2 {}

부모와 자식타입의 관계도


① 생성된 인스턴스는 FireEngine타입이다.

② 그럼에도 불구하고 Object, Car타입의 instanceof 연산에서도 true.

③ 이유는 FireEngine클래스는 Object클래스와 Car클래스의 자식 클래스이므로 부모의 멤버들을 상속 받았기 때문

④ 실제 인스턴스와 같은 타입의 instanceof 연산 이외에 부모타입의 instanceof 연산에도 teru를 결과로 얻으며 instanceof 연산의 결과가 true라는 것은 검사한 타입으의 형변환을 해도 아무런 문제가 없다.