본문 바로가기
까망 동네/디자인 패턴

[객체 지향] IS-A 관계와 HAS-A 관계

by 까망 하르방 2024. 10. 21.
반응형

IS-A

상속 관계에서 주로 사용된다.

상속은 상위 클래스를 구체화한다.

 

(동물) - (사람), (개) (고양이), (원숭이)

사람은 동물이다.

개는 동물이다

고양이는 동물이다.

 

상속 관계는 상위 클래스 기능을 하위 클래스가 물려받을 수 있다는 것에

클래스 계층구조가 안정적인 장점이 있다.

부모 클래스 명세가 변경되면 코드가 손상될 위험이 있다.

class Animal
{
    virtual void speak() {
        printf("동물...");
    }
}

class Dog : public Animal {}

class Cat : public Animal
{
    virtual void speak() {printf("야용...");}
}

void main()
{
    Animal* cat = new Cat();
    Animal* dog = new Dog();
    Animal* animal = new Animal();

    cat.speak(); // 야옹
    dog.speak(); // 동물...
    animal.speak(); // 동물...
}

 

 

HAS-A

'포함' 개념으로 상속을 사용하지 않는다.

하나의 객체가 다른 객체를 "(부분으로써) 갖거나" 하는 경우

 

is-a 관계보다 느슨한 결합으로

중간에 클래스 명세가 변경되더라도 유연성을 제공한다.

 

 자동차는 배터리를 가지고 있다.

 자동차는 HUD를 가지고 있다.

 자동차는 서라운드뷰 기능을 가지고 있다.

반응형

댓글