인스턴스란?
인스턴스(instance)는 클래스를 이용해 만든 객체 하나하나를 해당 클래스의 인스턴스라고 부릅니다.
instance of
이 연산자는 말 그대로 어떤 객체가 특정 클래스의 인스턴스인지를 확인하는 연산자입니다.
결과값은 참/거짓을 표현하는 boolean 타입인데 각각의 결과가 나오는 케이스는 다음과 같습니다.
true가 나오는 경우
- 객체가 해당 클래스의 인스턴스이거나 또는 해당 클래스를 상속하는 자식 클래스의 인스턴스일 경우
false가 나오는 경우
- 객체가 해당 클래스의 부모 클래스의 인스턴스일 경우
error
- 객체를 만든 클래스와 비교하고자 하는 클래스가 어떠한 상속관계도 가지지 않을 때
예시를 통해 살펴보겠습니다.
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Lion lion = new Lion();
People people = new People();
}
}
class Animal {
Animal(){}
}
class Lion extends Animal{
Lion(){}
}
class People extends Animal{
People(){}
}
총 3개의 클래스 Animal, Lion, People을 만들었고 Lion과 People은 Animal의 자식 클래스로 만들고 각각의 클래스를 이용해 인스턴스를 생성했습니다.
먼저 true가 나오는 케이스를 확인해보겠습니다.
// 객체가 해당 클래스의 인스턴스
System.out.println(animal instanceof Animal);
System.out.println(lion instanceof Lion);
System.out.println(people instanceof People);
// 객체가 해당 클래스를 상속하는 자식 클래스의 인스턴스
System.out.println(lion instanceof Animal);
System.out.println(people instanceof Animal);
다음은 false가 나오는 케이스를 확인해보겠습니다.
// 인스턴스를 생성한 클래스(Animal)가 비교 대상 클래스(Lion, People)보다 부모 클래스일 때
System.out.println(animal instanceof Lion);
System.out.println(animal instanceof People);
마지막으로 error가 발생하는 케이스를 확인해보겠습니다.
// People 과 Lion은 모두 Animal 클래스의 자식 클래스이지만 서로는 어떠한 상속관계도 갖지 않습니다.
System.out.println(lion instanceof People);
System.out.println(people instanceof Lion);
번외
instanceof 연산자를 사용할 때 비교 대상이 반드시 클래스여야 하는 것은 아닙니다. 클래스가 오는 자리에 인터페이스가 와도 상관이 없으며, 인터페이스가 올 경우 상속 관계에 따른 error는 발생하지 않고 true / false만 나오게 됩니다.
System.out.println(people instanceof Set); // false
'Java' 카테고리의 다른 글
접근제어자와 Getter & Setter (0) | 2023.04.06 |
---|---|
클래스, 객체, 인스턴스 (0) | 2023.04.06 |
얕은 복사 vs 깊은 복사 (0) | 2023.04.04 |
기본형, 참조형, Wrapper Class (0) | 2023.04.03 |
JDK & JRE & JVM의 개념 (0) | 2023.04.03 |