210130_JAVA_instanceof

정재현·2021년 1월 30일
0

TIL

목록 보기
60/80

오늘은 챕터15의 마지막 시간 instanceof 연산자에 대해서 알아보겠다.

instanceof 는 써본적이 없는 연산자인데,
참조변수가 참조하는 인스턴스의 '클래스'나 참조하는 인스턴스가 '상속하는 클래스'를 묻는 연산자이다.

if (참조변수 instanceof 클래스의 이름)

if (ca instanceof Cake)

이렇게 사용할 수 있다.

ca가 Cake의 인스턴스이거나 상속하는 클래스의 인스턴스면 true, 아니면 false이다.

이에 관련한 메소드 오버라이딩 문제가 있다.
instanceof 코드를 주고 instanceof 를 사용하지 않고 클래스의 상속 관계를 유지하며,
메소드 오버라이딩 기반으로 예제가 동작하도록 만들라고 한다.
그리고 필요하다면 메소드의 이름을 수정하라고 한다.

그 예제 코드는

class Box {
    public void simpleWrap() {
        System.out.println("Simple Wrapping");
    }
}

class PaperBox extends Box {
    public void paperWrap() {
        System.out.println("Paper Wrapping");
    }
}

class GoldPaperBox extends PaperBox {
    public void goldWrap() {
        System.out.println("Gold Wrapping");
    }
}


public class Wrapping {
    public static void main(String[] args) {
        Box box1 = new Box();
        PaperBox box2 = new PaperBox();
        GoldPaperBox box3 = new GoldPaperBox();

        wrapBox(box1);
        wrapBox(box2);
        wrapBox(box3);

    }

    public static void wrapBox(Box box) {
        if (box instanceof GoldPaperBox) {
            ((GoldPaperBox) box).goldWrap();
        } else if (box instanceof PaperBox) {
            ((PaperBox) box).paperWrap();
        } else {
            box.simpleWrap();
        }
    }
}

이렇다.
아이.. 문제를 이렇게 내면 어떡해..
instanceof 연산자를 사용하지 말래서 난 if안에 있는 이것을 어떻게 대체할까 생각을해봤는데,
아무래도 어떤 일말의 힌트도 주지 않은게 이상해서 답안을 보니..
그냥 wrapBox를 box.wrap(); 으로 쳐놓고,
위의 박스 클래스들의 출력 메소드 명을 wrap으로 바꿔놨다.
아이 이렇게 문제 설명을 해놓으면 안되지 참..

어쨋든 소스코드는
github: https://github.com/jeong-jaehyeon/JavaProject/blob/javaExercise/src/Wrapping.java

음 아 근데 맞는말이긴하지..
내가 너무 높이봤나..?
어쨋든 이렇게 해서 15챕터가 끝나고
다음은 16챕터를 진행한다. 상속의 마지막 챕터이다.

오늘의 코멘트: 어제 어떻게 그렇게 자버렸지.. 중간에 한번 깰법도한데..

profile
"돈받고 일하면 프로다"

0개의 댓글