ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...30
    일지 2022. 7. 29. 08:39

    public 상속 모형은 반드시 "is-a(...는 ...의 일종이다)"를 따르도록 만들자

    public 상속의 is-a 관계

    모든 사람은 학생이 아니지만 학생은 사람이다. 이 것의 관계가 public 상속이라고 할 수 있다.

    이를 코드로 만들면 다음과 같다.


    class Person {

        ...

       void eat() { ... }

    };

    class Student : public Person {

        ...

        void study() { ... }

    };


     

    사람의 일종인 학생은 사람이 할 수 있는 모든 것을 하지만 모든 사람이 공부하지는 않는다.

     

    그런데 이러한 설계가 잘못되면 문제가 생길 수 있다.

     

    모든 새는 난다고 가정해서 Bird 클래스에 fly 함수를 만들었다면 날지 못하는 새인 펭귄은 Bird를 상속받았을 때 fly 동작을 할 수 있게 될 것이다.

     

    따라서 이 경우엔 새를 구분하는 Bird 클래스와 날 수 있는 새를 구분하는 FlyingBird 클래스를 구분해 다음과 같이 구현할 수 있을 것이다.


    class Bird { ... };

    class FlyingBird : public Bird {

        ...

        void fly() { ... }

    };

    class Penguin : public Bird { ... };


     

    다만 자신이 사용하려는 정보에 날아다닌다는 게 필요가 없다면 단순히 Bird 클래스와 Penguin 클래스로 구분하고 fly 함수를 구현하지 않을 수도 있다.

     

    ※ 제작하려는 소프트웨어 시스템이 기대하는 바에 따라 설계를 달리해야 한다.

     

    댓글

Designed by Tistory.