개발 블로그
Published 2023. 4. 4. 15:10
instance of 연산자 Java

인스턴스란?

인스턴스(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
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!