- 객체타입 확인 instanceof -


instanceof

- instanceof는 객체 타입을 확인하는 연산자이다.

- 형변환 가능여부를 확인하며 true / false 로 결과를 반환한다.

- 주로 상속 관계에서 부모객체인지 자식객체인지 확인하는데 사용된다.

 

instanceof의 기본 사용방법은 "객체 instanceof 클래스" 를 선언함으로써 사용한다.

 

다음 예제로 어떤 구조인지 파악해 보자


class Parent{}
class Child extends Parent{}

public class InstanceofTest {

    public static void main(String[] args){

        Parent parent = new Parent();
        Child child = new Child();

        System.out.println( parent instanceof Parent );  // true
        System.out.println( child instanceof Parent );   // true
        System.out.println( parent instanceof Child );   // false
        System.out.println( child instanceof Child );   // true
    }

}

 

왜 세번째는 false가 반환되었을까?

instanceof를 위에서 "객체타입 확인", "형변환 가능한지 여부 확인" 이라 말했는데 어렵게 느껴진다면

쉽게 말해 instancof는 해당 클래스가 자기집이 맞는지 확인해 주는것 이라고 생각하면 될것이다.

 

1. parent instanceof Parent : 부모가 본인집을 찾았으니 true

2. child instanceof Parent : 자식이 상속받은 부모집을 찾았으니 true (상속을 받았으니 자기집이라해도 무방하다?)

3. parent instanceof Child : 부모가 자식집을 찾았으니 false (자식집은 자식집이지 부모집은 아니니까)

4. child instanceof Child : 자식이 본인집을 찾았으니 true

 

위에서 설명한것과 마찬가지로 이러나 저러나 본인이 이해하기 쉽게 받아들이면 될 것 같다.

누구한테는 하위클래스니 상위클래스니 하면서 접근하는게 이해가 더 잘 될 수 있으니 말이다.

 

*형변환이 불가능한 즉 타입이 상위클래스도 하위클래스도 아닐경우에는 에러가 난다.

반응형