상속과 인터페이스
상속과 인터페이스의 공통점은 다형성이다.
상속은 자주 사용하지만 인터페이스는 자주 사용하지 않았다.
프로젝트를 진행하던 중 적절한 사용상황을 발견하여 기록한다.
프로젝트 중, NPC와 Drop Item 모두 캐릭터와 상호작용하는 경우가 있다.
NPC는 대화를 통해 퀘스트를 주고, Drop Item은 Inventory에 Item을 추가한다.
둘 다, 상호작용하는 Actor이기 때문에 하나의 부모를 가지고 Interact 함수를 구현한 뒤 상속받게 하였다.
하지만, NPC를 구현하다 문제가 발생했다.
올바르게 동작하지만, 원하지 않는 상속이 이루어지게 되는 문제였다.
예를 들어, 부모 클래스인 InteractiveActor에서 Item에 관한 정보를 가지고 있다고 가정했을 때, NPC는 Item 정보는 필요하지 않지만 상속받게 된다.
이러한 상황에 인터페이스를 사용하면 문제를 해결할 수 있다.
다형성이 필요한 이유는 Character에서 Interact입력이 들어왔을 때, Overlap한 물체에 대한 조건처리가 아니라 다형성을 이용하여 해결하고 싶기 때문이다.
void Interact(...)
{
//actor = NPC & Item
actor->Interact();
}
이러한 상황에서 NPC와 Item의 상속구조를 끊어내고 Interactable Interface를 구현하면 된다.
정리하자면, 행위는 동일하지만 두 클래스사이의 관계가 없는 경우에는 인터페이스로 분리하는 것이 깔끔하다.