캐릭터 구현 시 상속을 통해서만 구현해야하는가?
일단 먼저 결론부터 말하면 '아니다'라고 할 수 있을것 같다.
상속을 사용하는 이유는 무엇인가?
상속은 이미 존재하는 클래스를 기반으로 손쉽게 변형 클래스를 만들수 있기 때문에 사용한다.
즉, 공통적인 부분을 사용하기 위해서 이며 클래스 간에 업/다운 캐스팅이 가능하기 때문이다.
업 캐스팅 / 다운 캐스팅은 무엇인가?
class Enemy
{
};
class Zombie : public Enemy
{
};
//...
int main()
{
//업 캐스팅
Enemy* zombie01 = new Zombie;
//다운 캐스팅
Enemy* pZombie = new Enemy;
Zombie* Zombie02 = dynamic_cast<Zombie*>(pZombie);
}
업 캐스팅 : 클래스 객체를 기반 클래스로 변환하는 것
다운 캐스팅 : 클래스 객체를 파생 클래스형으로 변환하는 것
상속의 단점은 무엇인가?
1. 상위 클래스 기능에 버그가 생기거나 추가 / 변경 등으로 변화가 생겼을 경우 상속받은 하위 클래스가 정상 작동이 가능한지 확신이 없다.
2. 상속 구조가 복잡해질수록 그 영향에 대한 예측이 힘들다.
3. 상위 클래스에서는 의미있는 기능이 하위 클래스에서는 의미가 없을 수 있다.
4. 하위 클래스는 반드시 상위 클래스로부터 받은 기능들을 제공해야하며 이것에 기능들이 추가되기 때문에 복잡해질 수 있다.
즉, 커플링이 심해지는 단점이 있다.
커플링(Coupling) : 결합도라고 하며 한 요소가 다른 요소와 얼마나 강력하게 연결되어 있는지, 또한 얼마나 의존적인지를 나타내는 정도이다.
상속을 통해서 캐릭터를 구현 시 부모나 자식을 수정할 경우 두곳에 다 영향을 끼칠 수 있다. 그러므로 컴포넌트화를 통해서 이 문제를 벗어날 수도 있을 것 같다.
https://blog.naver.com/han7477/222728830209
[디자인패턴] 컴포넌트
* 컴포넌트 패턴(Component Pattern) 로직을 기능별로 모듈화시켜 조합하여 사용하는 것. 한 개체가 여러...
blog.naver.com
'Game Programming > 자문자답' 카테고리의 다른 글
렌더링 파이프라인이란 무엇인가? (0) | 2022.09.13 |
---|---|
가비지 컬렉터와 스마트 포인터란 무엇인가? (2) | 2022.09.13 |
Call By Value / Address / Reference는 무엇인가? (0) | 2022.09.12 |
가상함수란 무엇인가? (0) | 2022.09.11 |
지역, 전역, 동적 할당 변수란 무엇인가? (0) | 2022.09.11 |