instanceof랑 Class.isAssignableFrom(…)의 차이가 뭐죠?


a instanceof B

B.class.isAssignableFrom(a.getClass()) 에서 제가 아는 차이는 a가 null이면 instanceof는 false를 리턴하고 isAssignableFrom은 exception을 throw한다는건데요.

그거 말고는 다 똑같나요?

  • 2016년 01월 12일에 작성됨

조회수 641


1 답변


좋아요
0
싫어요
채택취소하기

instanceof는 님이 컴파일 할때 B 클래스를 알고싶을때 쓰는거구요. isAssignableFrom()는 런타임에 동적으로 확일할때 씁니다.

부가설명

Object 가 특정 타입(클래스 및 인터페이스)을 상속받았거나 구현한 경우를 체크하기 위해서는

if(obj instanceof $TargetClass.class) {
}

위와 같이 체크하면 된다.

그런데 특정 클래스가 다른 인터페이스를 구현했거나 상속받았는지를 체크하기 위해서는 어떻게 하면 될까? 상위클래스들을 모조리(java.lang.Object 가 될때까지) 찾아다니면서 구현한 Interface들을 확인하면 될것도 같은데 왠지 세련되지 않은 것 같다.

isAssignableFrom 이라는 메소드는 위 문제를 쉽게 해결해준다.

내가 원하는 것은 사용자로부터 입력받은 클래스가 java.util.Collection 인터페이스를 (implements)구현한 클래스인지 체크하는 것이었다.

Class clazz = Class.forName(className);
boolean isCollection = java.util.Collection.class.isAssignableFrom(clazz);

위와 같이 사용하면 다음과 같은 의미로 해석된다. java.util.Collection은 clazz로 assign할 수 있다. 다시 말해서 clazz 클래스는 java.util.Collection 인터페이스를 구현한 클래스다라는 의미가 된다.

className = "java.util.ArrayList"로 설정한 후 테스트하면 이해하는데 도움될겁니다.

  • 2016년 01월 12일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close