프로젝트 리팩토링을 진행하며 isAssignableFrom() 이란 메서드를 처음 보고 궁금해 찾아보니
instanceof와의 차이점이있는 메서드다
class A {
}
class B extands A {
}
A 클래스가 있고 A를 상속한 B 클래스가 있을때
instanceof
class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();
b instanceof A // true
a instanceof B // false
b instanceof B // true
a instanceof A // true
}
}
instanceof는 해당 객체가 해당 타입으로 형변환 가능 여부를 확인한다
b 객체는 A타입으로 형변환이 가능하지만 a 객체는 B타입으로 형변환이 불가능하다
isAssignableFrom()
class Main {
public static void main(String[] args) {
A.class.isAssignalbeFrom(B.class) // true
B.class.isAssignableFrom(A.class) // false
A.class.isAssignableFrom(A.class) // true
B.class.isAssignableFrom(B.calss) // true
}
}
isAssignableFrom()은 클래스와 클래스를 비교한다
A.class.isAssignableFrom(B.class) B 클래스가 A 클래스를 상속받거나 구현했는지 확인한다
A 클래스는 B 클래스의 부모 클래스이기 때문에 true이다