본문 바로가기
Dev/Java

[Java] 자바의 정석 기초편 ch7-26 instanceof 연산자

by 코딩삐약 2022. 6. 27.

ch7-26 instanceof 연산자

- 참조변수의 형변환 가능 여부 확인에 사용. 가능하면 true 반환

(조상<->자손)

- 형변환 전에 반드시 instanceof로 확인해야 함

void doWork (Car c) {
	if(c instanceof FireEngine) {  // 1. 형변환이 가능한지 확인
        FireEngine fe = (FireEngine) c; // 2. 형변환
        fe.water();
        ...
    }
}

/* 형변환을 하는 이유는 인스턴스의 원래 기능을 모두 사용하려고
   Car타입의 리모콘인 c로는 water()를 호출할 수 없으니까.
   리모콘을 FireEngine타입으로 바꿔서 water()를 호출.
*/
FireEngine fe = new FireEngine();
System.out.println(fe instanceof Object); //조상 true.
System.out.println(fe instanceof Car);    //조상 true.
System.out.println(fe instanceof FireEngine); // true.

Object obj = (Object) fe; // OK 
Car c = (Car) fe; // OK

 

 

Q. 참조변수의 형변환은 왜 하나요?
A.  참조변수(리모콘)를 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위해서
FireEngine f = new FireEngine();

Car c = (Car)f; // OK. 조상인 Car타입으로 형변환(생략가능)

 

Q. instanceof 연산자는 언제 사용하나요?
A. 참조변수를 형변환하기 전에 형변환 가능여부를 확인할 때
void doWork (Car c) {
	if(c instanceof FireEngine) {  // 1. 형변환이 가능한지 확인
        FireEngine fe = (FireEngine) c; // 2. 형변환
        fe.water();
        ...
    }
}