티스토리 뷰

 

자바에서 객체의 타입 비교를 할 때는 'instanceof'와 'getClass().equals()'를 타용할 수 있다.

 

하지만 두 방법은 기능이 똑같아 보이지만 다르게 동작한다. 

오늘은 그 경우를 정리해보고자 한다.

 

' instanceof ' 

객체가 특정 클래스 또는 그 클래스의 서브클래스의 인스턴스인지를 확인하는 연산자이다.

'instanceof' 연산자는 왼쪽 피연산자의 객체가 오른쪽 피연산자의 클래스 또는 그 클래스의 서브클래스의 인스턴스인지를 판별하여 'true' 또는 'false'를 반환한다.

 

class Animal {
}

class Cat extends Animal {
}

Animal animal = new Animal();
Cat cat = new Cat();

System.out.println(animal instanceof Animal); // 1. true
System.out.println(animal instanceof Cat); // 2. false
System.out.println(cat instanceof Animal); // 3. true

' getClass().equals() '

객체의 클래스를 반환하는 'getClass()' 메서드와 클래스 객체의 동등성을 비교하는 'equals()' 메서드를 조합하여 두 객체의 타입이 같은지를 확인하는 방법이다.

class Animal {
}

class Cat extends Animal {
}

Animal animal = new Animal();
Cat cat = new Cat();

System.out.println(animal instanceof Animal); // 1. true
System.out.println(animal instanceof Cat); // 2. false
System.out.println(cat instanceof Animal); // 3. false

 

'instanceof' 와 'getClass().equals()'의 코드를 살펴보면 1번과 2번 경우의 출력은 동일하다.

하지만 서브클래스 비교여부인 3번의 결과가 다르다.

 

즉, 'instanceof' 연산자는 상속 관계를 고려하여 서브클래스도 상위 클래스의 인스턴스로 간주한다. 반면에 'getClass().equals()'메서드는 객체의 정확한 클래스와 클래스 객체의 동등성을 비교하는데, 서브클래스와 상위클래스는 서로 타입이 다르다고 간주한다.

 

이것이 'instanceof'와 'getClass().equals()'의 차이점이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함