개발 일지/Java

[Java] instanceof 연산자

미숫가루설탕많이 2022. 12. 30. 13:33

 instanceof 연산자는 객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는 데 사용하는 연산자이다. 자바의 문법요소로 캐스팅이 가능한 지 여부를 boolean 타입으로 확인할 수 있다. 

 

 캐스팅 가능 여부를 판단하기 위해서는 '객체를 어떤 생성자로 만들었는가'와 '클래스 사이에 상속관계가 존재하는가'를 판단해야 한다.

 

 프로젝트의 규모가 커지고 클래스가 많아지면 매번 이러한 정보를 확인하기 힘들어지는데, 이를 해결하기 위해 자바는 instanceof 라는 연산자를 제공한다.

 

참조변수 instanceof 타입

 

 이렇게 입력했을 때 리턴 값으로 true가 나오면 참조 변수가 검사한 타입으로 타입 변환이 가능하며, false가 나온다면 타입 변환이 불가능하다. 참조 변수가 null인 경우에도 false를 반환한다.

 

package Practice;

class Animal {};
class Dog extends Animal{};
class Cat extends Animal{};

public class HelloJava {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(animal instanceof Object); // true
        System.out.println(animal instanceof Animal); // true
        System.out.println(animal instanceof Dog); // false

        Animal cat = new Cat();
        System.out.println(cat instanceof Object); // true
        System.out.println(cat instanceof Animal); // true
        System.out.println(cat instanceof Dog); // false
        System.out.println(cat instanceof Cat); // true
    }
}

 

 위 코드를 보면 Dog 클래스랑 Cat 클래스가 Animal 클래스를 상속받고 있다. 그리고 각각 객체를 생성하여 Animal 타입의 참조 변수에 넣고 instanceof 키워드를 사용해서 형변환 여부를 확인하고 있다.

 

Cat 객체는 Animal 타입으로 선언되어있지만 다형적 표현 방법에 따라 Object 타입과 Animal 타입으로도 선언될 수 있다는 것을 확인할 수 있다.

 

 이처럼 instanceof 연산자는 형변환 여부를 확인해서 에러를 최소화하는 매우 유용한 수단이 될 수 있다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] final 키워드  (0) 2023.01.02
[Java] 추상화(Abstraction)  (0) 2022.12.30
[Java] 참조 변수의 타입 변환  (0) 2022.12.30
[Java] 다형성(Polymorphis)  (0) 2022.12.30
[Java] getter과 setter 메서드  (2) 2022.12.29