3냥 집사이면서 게임 개발자입니다.
언리얼 C++ 인터페이스 클래스와 C++ 인터페이스 클래스와 차이점 본문
Native C++ 의 경우 다중 상속은 지양하고 Is a 보다는 Has a 를 지향하는 편인데 언리얼 C++ 의 인터페이스 클래스는 다중 상속을 권장하는 것 같아서 혼란스러웠습니다.
관련 내용을 더 공부하고 정리해보겠습니다.
인터페이스는 C++ 후발 언어인 Java나 C# 등에서 정식으로 지원하는 기능입니다.
후발 주자들은 모던 객체 지향 원칙을 준수하기 위해, 단일 상속 (Extends)에 추가로 인터페이스를 구현(Implements)하는 형태를 가집니다.
하지만 오래 전에 개발된 C++ 의 경우에는 인터페이스를 구현한다는 개념은 없고 오로지 상속만 있습니다.
따라서 인터페이스를 추상 클래스로 정의하고 다중 상속을 사용해 유사하게 구현하는 방식이 최선입니다.
이 부분에서 혼동이 있었습니다. C++ 의 인터페이스 클래스는 제공하는 기능이 아닌 유사하게 구현하는 방식이라는 점입니다. 부모로써 상속받는 개념이 아닌 말 그대로 인터페이스로써 메서드를 제공한다라는 점에서요.
따라서 C++ 에서 인터페이스의 구현은 다중 상속의 형태를 가지지만, 내부적으로는 인터페이스 구현에 필요한 규칙을 지정해 개발자들이 이를 준수하도록 하는 암묵적 합의의 형태로 구현합니다.
언리얼의 경우 에디터에서 인터페이스 클래스를 생성하는 경우 이를 식별할 수 있도록 여러 가지 매크로 및 규칙을 지정해두고 자체적으로 제작한 헤더 툴(Unreal Header Tool)을 사용해 문법의 무결성을 체크하는 기능을 지원한다고 합니다.
그리고 언리얼의 인터페이스 클래스는 상속의 개념이라기 보다 메시지 함수와 비슷하다고 합니다.
그래서 어떤 클래스에 대해서도 호출이 가능하고, 해당 클래스에 인터페이스 함수가 구현되어 있으면 처리를 하지만, 구현 되어 있지 않으면 조용히 실패를 한다고 합니다.
위 내용을 공부하고나니 C++ 에서 인터페이스 클래스보다 범위가 좁은 추상 클래스를 통해 베이스 클래스를 생성하는 이유에 대해서 좀 더 깊은 이해를 할 수 있었습니다.
'Unreal Engine 5 > 언리얼 C++' 카테고리의 다른 글
언리얼 C++ 설계 3 - 델리게이트 (Delegate) (0) | 2023.07.26 |
---|---|
언리얼 C++ 설계 2 - 컴포지션 (Composition) (0) | 2023.07.26 |
언리얼 C++ 설계 1 - 인터페이스 (Interface) (0) | 2023.07.25 |
언리얼 오브젝트 리플렉션 시스템 2 (0) | 2023.07.25 |
언리얼 오브젝트 리플렉션 시스템 1 (0) | 2023.07.25 |