충분히 쌓여가는
instanceof 연산자 본문
instanceof 연산자
참조변수의 형변환 가능여부 확인에 사용, 가능하면 true반환
형변환 전에 반드시 instanceof로 확인해야 된다
코드
class Car {
String color;
int door;
void drive() {
System.out.println("drive");
}
void stop() {
System.out.println("stop");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water");
}
}
Car 또는 Car의 모든 자손은 doWork()에 들어갈 수 있다
어떤 것이 들어올지 모르는 상태에서 FireEngine이 형변환으로 들어갈 수 없다
만약 Ambulance가 들어왔을때 FireEngine으로 형변환은 형제관계이기 때문에 불가능하다
이때 형변환이 가능한지 확인하기 위해 사용하는 것이 instanceof 연산자이다
형변환을 하는 이유는 인스턴스의 원래 기능을 모두 사용하기 위함
Car 타입의 참조변수 c는 water()를 호출할 수 없다, 따라서 FireEngine 타입으로 바꿔서 water()를 호출한다
void doWork(Car c) {
if(c instanceof FireEngine) { // 1. 형변환이 가능한지 확인, c가 가리키는 객체가 FireEngine인지 확인
FireEngine fe = (FireEngine)c; // 2. 형변환
fe.water();
...
else if(c instanceof Ambulance) {
Ambulance a = (Ambulance)c;
}
}
주의사항
Object(최고조상) <- Car <- FireEngine
instanceof가 true가 나왔다고해서 FireEngine이 가리키는 객체가 Object는 아니다
조상이니까 true가 나온다
FireEngine fe = new FireEngine();
System.out.println(fe instanceof Object); // true
System.out.println(fe instanceof Car); // true
System.out.println(fe instanceof FireEngine); // true
Object obj = (Object)fe; // OK
Car c = (Car)fe; // OK
1. 참조변수의 형변환을 하는 이유?
참조변수(리모컨)을 변경함으로써 사용할 수 있는 멤버의 개수를 조절하기 위함
객체와 참조변수는 변하지 않는다, 참조변수의 타입만 달라진다
2. instanceof 연산자 사용시기
참조변수를 형변환하기 전에 형변환 가능여부를 확인할 때 사용한다
'Java > 객체지향' 카테고리의 다른 글
하나의 배열로 여러 종류 객체 다루기(다형성 장점 2) (0) | 2023.06.13 |
---|---|
매개변수의 다형성(다형성 장점 1) (0) | 2023.06.13 |
참조변수의 형변환 (0) | 2023.06.12 |
다형성(polymorphism) (0) | 2023.06.12 |
캡슐화 (0) | 2023.06.09 |