이번엔 instancof라는 연산자에 대해 알아보겠습니다.

이 연산자는 내가 형변환을 하려고 할때 가능한지 아닌지 알아보는 연산자입니다.

형변환이 가능하면 리턴값으로 true, 가능하지 않다면 false를 리턴해줍니다.

지난 포스팅에서 사용했던 예제를 약간 수정하여 instanceof연산자를 사용해 보겠습니다.

먼저 instanceof연산자의 사용방법은

검사하고자하는 변수 + instanceof + 변환하고자하는 데이터타입(클래스)

PolyDemo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.dreamstorage.Polymorphism;
/*
 *  instanceof연산자 사용해보기.
 */
public class PolyDemo {
    public static void main(String[] args) {
        Car car = new PoliceCar();
        car.drive();
        car.stop();
        //car.siren();
    }
}
 
class Car{
    
    public void drive(){
        System.out.println("주행");
    }
    
    public void stop(){
        System.out.println("브레이크");
    }
}
 
class PoliceCar extends Car{
     public void criminal(){
         System.out.println("범죄자를 대려감");
     }
     
     public void siren(){
         System.out.println("경찰차 사이렌");
     }
}
 
cs

이 소스에서 10번라인 주석을 해제하면 에러가 납니다.

그 이유는 car참조변수는 데이터타입이 Car이기 때문이죠


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.dreamstorage.Polymorphism;
/*
 *  instanceof연산자 사용해보기.
 */
public class PolyDemo {
    public static void main(String[] args) {
        Car car = new PoliceCar();
        car.drive();
        car.stop();
        //car.siren();
        
        if(car instanceof PoliceCar){
            System.out.println(car instanceof PoliceCar);    // true를 리턴하는지 보기위해서
            ((PoliceCar)car).siren();    // PoliceCar타입으로 변환이 가능하므로 변환.
        }else{
            System.out.println(car instanceof PoliceCar);
        }
    }
}
 
class Car{
    
    public void drive(){
        System.out.println("주행");
    }
    
    public void stop(){
        System.out.println("브레이크");
    }
}
 
class PoliceCar extends Car{
     public void criminal(){
         System.out.println("범죄자를 대려감");
     }
     
     public void siren(){
         System.out.println("경찰차 사이렌");
     }
}
cs

12번라인부터 17번라인까지 추가한 부분입니다.

if문의 조건식에 instanceof를 사용하여 car참조변수가 PoliceCar타입으로 변환이 가능한지 검사하였습니다.

이러한 방식으로 데이터타입이 변환이 가능한지 확인 할 수가 있습니다 ^^