본문 바로가기
back-end/JAVA

33) instanceof연산자

by 모두의 향연 2021. 6. 9.
728x90
반응형

33) instanceof연산자

 

1. instanceof연산자란?

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

-형 변환 전에 반드시 instanceof로 확인해야 한다.

1
2
3
4
5
void dowork(Car c) {
    if(c instanceof FireEngine) { //1.형변환이 가능한지 확인
        FireEngine fe = (FireEngine)c; //2.형변환
    }
}
cs

 

1행| void dowork(Car c) { Car c가 조상이기 때문에 객체로는 new Car(), new FireEngine(), new Ambulance()가 올 수 있다. 그 객체를 쓰기 전에 맞는지 확인하려 하는 것이다. 참조변수 형변환은 조상과 자손끼리만 된다.

 

 

2. 형변환 하는 이유

인스턴스의 원래 기능을 모두 사용하려고 한다. Car타입의 리모콘인 c로는 water()를 호출할 수 없다. 리모콘을 FireEngine타입으로 바꿔서 water()을 호출하기 위함이다. 

 

 

 

3. instanceof는 조상과 자기 자신에 대해서 참을 반환한다.

1
2
3
4
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
cs

형변환이 가능하다고 'true'가 나왔다해서 FireEngine이 가리키는 게 Object나 Car는 아니죠. 형변환 가능 여부만 묻고 싶을 뿐.. 객체는 그대로.

 

<정리 퀴즈>

Q. 참조변수의 형변환은 왜 하나?

    :참조변수(리모콘)을 변경함으로써 사용할 수 있는 멤버의 개수를 조절하기 위해서

Q. instanceof연산자는 언제 사용하나?

    :참조변수를 형변환하기 전에 형변환 가능 여부를 확인할 때

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형