한 걸음 두 걸음
자바 JAVA ] instanceof 연산자 : 객체의 타입을 알아내는 방법 본문
반응형
instanceof
객체의 타입이 실제로 무엇인지 알아내거나 형변환이 가능한지 알아야 하는 경우, instanceof 연산자를 사용합니다.
A(객체) instanceof B(타입클래스)
더 명확하게 이야기하자면,
- 자기자신의 클래스 객체인가
- 자식클래스의 객체인가 확인하기 위해 사용합니다.
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이다.
}
처럼 알아낼 수 있습니다.
반응형
'Language > Java' 카테고리의 다른 글
자바 JAVA ] 예외처리 exception throws / try / throw (0) | 2019.11.21 |
---|---|
자바 JAVA ] 내부클래스 inner class / 무명클래스 anonymous class (0) | 2019.11.21 |
자바 Java ] 람다 표현식 Ramda (0) | 2019.11.20 |
자바 Java ] 다형성 Polymorphism (0) | 2019.11.20 |
자바 JAVA ] 인터페이스 interface / CompareTo, Comparable (0) | 2019.11.20 |