Java
InstanceOf
꽃달린감나무
2022. 1. 17. 15:30
728x90
- Instanceof
- 상속 관계를 바탕으로 형 변환이 가능한지를 묻는 연산입니다.
- Syntax : (object) instanceof (type) /
- object가 type 이거나 type을 상속받는 클래스이면 true를 반환, 그렇지 않으면 false을 반환합니다.
- 모든 클래스는 Object를 상속하기 때문에 항상 true를 반환합니다.
- null 객체에 대해서는 항상 false를 반환합니다.
class Box{
public void simpleWrap() {System.out.println("simple wrap");}
}
class PaperBox extends Box{
public void paperWrap() {System.out.println("paper wrap");}
}
class GoldPaperBox extends PaperBox{
public void goldWrap() {System.out.println("Goldpaper wrap");}
}
public class InstanceOf {
public static void wrapBox(Box box) {
if(box instanceof GoldPaperBox)
((GoldPaperBox)box).goldWrap();
else if(box instanceof PaperBox)
((PaperBox)box).paperWrap();
else
box.simpleWrap();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Box box = new Box();
PaperBox pbox = new PaperBox();
GoldPaperBox gbox = new GoldPaperBox();
wrapBox(box);
wrapBox(pbox);
wrapBox(gbox);
}
}
wrapBox 메소드는 box를 매개변수로 하는 메소드 입니다. Box 클래서 혹은 Box의 하위 클래스로 매개변수 box를 메소드에서 넘겨받지만, 어떤 타입의 클래스인지 메소드 내에서는 알 수 없습니다. 그렇기에 instanceof문을 통해 인스턴스의 타입을 검사하여 적절한 형 변환을 한 뒤에 작업을 실행해야합니다.
- 형 변환을 하는 이유
참조변수 와 실제로 참조 받고있는 인스턴스의 타입이 항상 같지는 않습니다. 그렇기에 instanceof를 통해 형 변환이 가능한지 검사하고, 원하고자 하는 인스턴스의 멤버의 타입으로 참조변수를 형 변환시켜 사용하고자 하는 기능을 사용하기 위해서 입니다. 즉, 인스턴스의 원래기능을 모두 사용하기 위함입니다.
728x90