본문 바로가기
개발

IS-A 관계와 HAS-A 관계

by blondie 2023. 11. 5.

1. IS-A

 

'A is B' 와 같이 'A는 B 이다' 라는 관계.

 

클래스간 관계에서, 한 클래스가 다른 클래스의 파생 클래스, 즉 부모-자식 관계 

 

ex) 사람은 동물이다. 개는 동물이다. 사람과 개 모두 상위 카테고리로 동물을 갖는다.

반대는 성립하지 않음. 동물은 사람이다(x) 동물은 개이다(x)

 

상속은 두 클래스가 IS-A 관계일때만 하는게 좋다.

 

사진 출처 : https://zangzangs.tistory.com/44

 

 

class Animal {
	public:
    	int gender;
    ...
}

class Human : public Animal {
	public:
    	int race;
    ...
}

 

 

 

2. HAS-A

 

어떤 기능을 포함하고 싶은 경우 사용한다

 

IS-A에는 명백한 상위 - 하위 카테고리가 존재하지만, HAS-A는 그렇지 않다.

 

HAS-A는 하나의 포함관계

 

ex) 컴퓨터-CPU, 비행기-엔진

 

클래스간 상속을 사용하지 않는다. 대신 클래스 내에 '포함'시킬 수 있다.

예를 들어 멤버변수로 해당 인스턴스를 사용한다던지

 

 

사진출처: https://zangzangs.tistory.com/44

class Engine {
	...
}


class Airplane {
	private:
    	Engine en; // 엔진을 비행기 클래스에 '포함'
    ...
}