instanceof
- 캐스팅의 가능 여부를 판단하기 위해서는 '클래스 사이의 상속 관계', '어떤 생성자로 인스턴스를 생성했는가?'를 판단해야 한다.
- 프로젝트의 규모가 커지고, 클래스가 많아지면 이러한 조건을 매순간 판단하는 것이 어려워진다.
- 이를 해결하기 위해 Java에서는 캐스팅 가능 여부를 boolean 타입으로 반환해주는 instanceof라는 연산자를 제공한다.
- 소스 코드가 길어져 일일이 생성 객체의 타입을 확인하기 어려운 상황에서 에러를 최소화하는 유용한 수단이 될 수 있다.
-> 캐스팅 가능 여부를 확인하고, 가능한 때만 캐스팅을 수행해 실행 예외로 프로그램이 종료되는 것을 방지할 수 있다.
참조 변수 instanceof 타입명
예시
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal cat1 = new Cat();
Cat cat2 = new Cat();
System.out.println("캐스팅 가능 여부");
System.out.println(animal1 instanceof Cat); // animal1이 Cat으로 형변환 가능?
System.out.println(cat1 instanceof Cat); // cat1가 Cat으로 형변환 가능?
System.out.println(cat2 instanceof Animal); // cat2가 Cat으로 형변환 가능?
Cat cat3 = null;
if (cat1 instanceof Cat) { // Animal cat1이 Cat으로 캐스팅 가능?
cat3 = (Cat)cat1; // 가능하면 형변환
cat3.grooming(); // Cat의 기능 그루밍() 호출
} else { // 다운 캐스팅을 할 수 없으면 오류 메세지 출력
System.out.println("Animal cat1은 Cat으로 캐스팅할 수 없습니다.");
}
Cat cat4 = null;
if (animal1 instanceof Cat) { // Animal animal1이 Cat으로 캐스팅 가능한가?
cat4 = (Cat) animal1;
cat4.grooming();
} else {
System.out.println("Animal animal1은 Cat으로 캐스팅할 수 없습니다.");
}
}
}
class Animal {
public void sleep() {
System.out.println("잠을 잡니다.");
}
}
class Cat extends Animal {
public void grooming() {
System.out.println("그루밍을 합니다.");
}
}
'Langauge > Java-basic' 카테고리의 다른 글
[Java] super 키워드와 super() 메서드 (0) | 2022.08.03 |
---|---|
[Java] 메서드 오버라이딩(Method Overriding) (0) | 2022.07.31 |
[Java] 업 캐스팅과 다운 캐스팅 (0) | 2022.07.30 |
[Java] 상속 관계와 포함 관계 (0) | 2022.07.29 |
[Java] final 키워드 (0) | 2022.07.25 |