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