본문 바로가기
Java/Basic

다형성(polymorphism) - instanceof 연산자

by 최로이 2021. 3. 31.

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라는 것은 검사한 타입으의 형변환을 해도 아무런 문제가 없다.

댓글