한 걸음 두 걸음

자바 JAVA ] instanceof 연산자 : 객체의 타입을 알아내는 방법 본문

Language/Java

자바 JAVA ] instanceof 연산자 : 객체의 타입을 알아내는 방법

언제나 변함없이 2019. 11. 20. 18:57
반응형

instanceof

객체의 타입이 실제로 무엇인지 알아내거나 형변환이 가능한지 알아야 하는 경우, instanceof 연산자를 사용합니다.
A(객체) instanceof B(타입클래스)

더 명확하게 이야기하자면,

  1. 자기자신의 클래스 객체인가
  2. 자식클래스의 객체인가 확인하기 위해 사용합니다.

instanceof 연산자는

자식 instanceof 부모 관계이면 true

부모 instanceof 자식 관계이면 false를 반환합니다.


동물을 상속받는 개, 고양이, 다람쥐 클래스가 있을 때,

Class Animal {
    public int a;
    Animal(){
        a = 10;
    }
}

Class Cat extends Animal{
    public int b;
    Cat(){
        b = 20;
    }
}

(예시, 동물 / 고양이클래스)
동물 참조변수로 고양이 클래스를 참조할 수 있습니다.(상향 형변환)

public class Main {
    public static void main(String[] args) {
        Animal ani = new Cat(); //상향 형변환!
        ani.a; //10
        ani.b; //불가능, 상향 형변환의 경우 부모객체와 자식객체의 공통된 부분만 접근 가능
    }
}

하지만 언뜻 보기엔 ani가 Animal객체를 참조하고 있는 것처럼 보이지만 실제로는 Cat객체를 참조하고 있죠. 이런 경우 ani가 진짜로 참조하는 객체가 어떤 것인지, ani가 Cat으로 형변환이 가능한지 알아야 할 필요가 있습니다. 이 때 instanceof연산자를 활용합니다.

ani = getClass(); //자신이 참조하고 있는 클래스가 무엇인지 확인, (Cat이죠)
if ( ani instanceof Cat){
    //ani객체의 타입은 Cat이다. 
}

처럼 알아낼 수 있습니다.

반응형