1. IS-A
'A is B' 와 같이 'A는 B 이다' 라는 관계.
클래스간 관계에서, 한 클래스가 다른 클래스의 파생 클래스, 즉 부모-자식 관계
ex) 사람은 동물이다. 개는 동물이다. 사람과 개 모두 상위 카테고리로 동물을 갖는다.
반대는 성립하지 않음. 동물은 사람이다(x) 동물은 개이다(x)
상속은 두 클래스가 IS-A 관계일때만 하는게 좋다.
class Animal {
public:
int gender;
...
}
class Human : public Animal {
public:
int race;
...
}
2. HAS-A
어떤 기능을 포함하고 싶은 경우 사용한다
IS-A에는 명백한 상위 - 하위 카테고리가 존재하지만, HAS-A는 그렇지 않다.
HAS-A는 하나의 포함관계
ex) 컴퓨터-CPU, 비행기-엔진
클래스간 상속을 사용하지 않는다. 대신 클래스 내에 '포함'시킬 수 있다.
예를 들어 멤버변수로 해당 인스턴스를 사용한다던지
class Engine {
...
}
class Airplane {
private:
Engine en; // 엔진을 비행기 클래스에 '포함'
...
}