본문 바로가기
Language/Java

instanceof 연산자

by 태윤2 2020. 6. 9.
  • instanceof 연산자

 

  • 어떤 객체에 대한 is-a 관계를 판별하는 연산자
  • 주로 if문을 사용하여 형변환이 가능한 지 여부를 판별하는 용도로 사용
  • 연산자 좌변에는 판별에 필요한 객체의 레퍼런스 변수를 지정하고
  • 연산자 우변에는 is-a 관계 판별에 사용될 클래스명을 지정
  • 좌변의 객체가 우변의 클래스 타입으로 형변환이 가능하지 여부 판별
  • A is a B 에 대한 판별 문법 A instanceof B 형태로 사용
  • (A : 객체의 레퍼런스 변수명, B : 클래스명
  • instaceof 연산 결과가
  • true 이면 형변환 가능 (업 or 다운캐스팅)
  • false 이면 어떤방법으로든 형변환 불가
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
class Car {
    int speed;
    int maxSpeed;
 
    public Car(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }
 
    public void seedUP(int Speed) {
        System.out.println("Car 속력 증가");
    }
    public void speedDown(int Speed) {
        System.out.println("Car 속력 감소");
    }
}
 
class Taxi extends Car {
    
    public Taxi(int maxSpeed) {
        super(maxSpeed); //명시적으로 슈퍼클래스의 생성자 호출
    }
    @Override
    public void speedUp(int Speed) {
        System.out.println("Taxi 속력 증가");
    }
    @Override
    public void speedDown(int Speed) {
        System.out.println("Taxi 속력 감소");
    }
    public void lift() {
        System.out.println("손님 승차");
    }
    public void drop() {
        System.out.println("손님 하차");
    }
}
cs

 

 

클래스들로 instanceof를 사용해 캐스팅

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
 
public class Code {
    
    public static void main(String[] args) {
        Taxi taxi = new Taxi(100);
        Car car = null;
        if(taxi instanceof Car) {
        car = taxi;
        // 업캐스팅 이후엔 공통 메서드만 호출 가능
        car.speedUP(100);
        car.speedDown(50);
        }
        //car > Taxi 다운캐스팅
        if(car instanceof Taxi) {
        Taxi taxi2 = (Taxi)car;
            // 다운캐스팅 후 호출가능한 메서드 4개
            taxi2.speedUp(200);
            taxi2.speedDown(120);
            taxi2.lift();
            taxi2.drop();
        }
    
    }
 
}
cs

 

 

 

 

'Language > Java' 카테고리의 다른 글

final 키워드  (0) 2020.06.11
추상메서드(abstract method)  (0) 2020.06.11
캐스팅  (0) 2020.06.09
레퍼런스(참조형) 형변환  (0) 2020.06.05
생성자 super()  (0) 2020.06.05