Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 4-9
상속 vs 컴포지션
우리는 여태 하위 블루프린트 클래스를 생성하며 상속 기능에 대해 자연스럽게 사용해왔다.
이번엔 상속에 대해 더 깊이 알아보며, 이와 동시에 컴포지션이라는 기능에 대해서도 같이 알아본다.
우선 상속은 하위 클래스가 상위 클래스의 모든 기능을 자동적으로 물려받는 것이다.
그리고 컴포지션은 클래스 A가 클래스 B의 인스턴스를 포함한다고 말할 수 있고, 해당 기능을 사용할 수는 있지만 클래스 B에 소속된 것이 아니며 원하는 부분만 선택해서 가져갈 수 있는 것을 의미한다.
아래 예시를 살펴보자.
동물은 Live()라는 기능을 가진다.
포유류는 MakeMilk()라는 기능을 가진다.
파충류는 LayEggs()라는 기능을 가진다.
포유류와 파충류는 Live()기능을 필요로 하며, 동물에 상속되어있다.
암소는 MakeMilk() 기능과 Live() 기능을 가진다.
따라서 포유류에 상속되는 동시에 동물에 상속되어있다.
뱀은 LayEggs() 기능과 Live() 기능을 가진다.
따라서 파충류에 상속되는 동시에 동물에 상속되어있다.
하지만 오리 너구리의 경우를 보자.
오리 너구리는 LayEggs()기능과 MakeMilke() 기능을 가진다.
하지만 파충류이자 포유류일수는 없다.
여기서 사용되는 것이 컴포지션 기능이다.
우선 암소는 MilkMakingComponent를 가지고 있다 하고, 해당 컴포넌트가 MakeMilk() 기능을 가진다.
그리고 뱀은 EggLayingComponent를 가지고 있다 하고, 해당 컴포넌트는 LayEggs() 기능을 가진다.
오리 너구리는 위 2개의 컴포넌트를 모두 가질 수 있으며, 각각에 속한 기능 또한 가지게 된다.
말 그대로 파충류나 포유류에 속한 것은 아니지만, 안에 속한 기능만을 선택하여 가져오는 것이다.
또다른 예시를 살펴보자.
Static Mesh Actor가 존재한다.
여기에 상속받는 Mover가 존재한다.
또 Mover에 상속받는 Moving Door와 Moving Wall이 존재한다.
그리고 Moving Light가 존재한다.
Moving Light는 Mover의 기능을 원하지만 Static Mesh Actor로부터 상속받는 Mover에서 상속받는 것은 불가능하다.
우리는 Light Actor를 Moving Light의 상위 클래스로 사용하고 싶다.
이를 해결하려면 어떻게 해야 할까?
우선 Moving Door와 Moving Wall은 Static Mesh Actor에서 상속받는다.
그리고 Moving Light는 Light Actor에서 상속받는다.
여기서 Mover를 컴포넌트로, Moving Light와 Moving Door, Moving Wall은 모두 Mover 컴포넌트를 갖게 하면 된다.