언리얼 C++ 인터페이스 클래스를 사용해 보다 안정적으로 클래스를 설계하는 기법에 대해 정리하겠습니다.
언리얼 C++ 인터페이스
- 인터페이스란?
- 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입입니다.
- 다영성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용됩니다.
- 언리얼 엔진에서 게임 콘텐츠를 구성하는 오브젝트의 설계 예시
- 월드에 배치되는 모든 오브젝트, 안 움직이는 오브젝트를 포함합니다 (Actor)
- 움직이는 오브젝트 (Pawn)
- 길찾기 시스템을 반드시 사용하면서 움직이는 오브젝트 (INavAgentInterface 인터페이스를 구현한 Pawn)
인터페이스를 사용해 이전에 작업한 예제를 위한 클래스 생성 3를 작업해보겠습니다.
- 수업에 참여하는 사람과 참여하지 않는 사람의 구분
- 수업에 반드시 참여해야 하는 학교 구성원 : 학생, 선생
- 수업에 참여하지 않는 학교 구성원 : 교직원
- 수업 행동에 관련된 인터페이스 : ILessonInterface
예시를 구현하기 전에 언리얼 C++ 인터페이스 특징에 대해 정리하겠습니다.
- 인터페이스를 생성하면 두 개의 클래스가 생성됩니다. (하나의 인터페이스에 두 개의 클래스)
- U로 시작하는 타입 클래스 (클래스 타입 정보를 제공하는 타입 전용 클래스)
- I로 시작하는 인터페이스 클래스 (실질적인 설계 및 구현)
- 객체를 설계할 때 I 인터페이스 클래스를 사용
- U타입 클래스 정보는 런타임에서 인터페이스 구현 여부를 파악하는 용도로 사용도비니다.
- 실제로 U타입 클래스에서 작업할 일은 없습니다.
- 인터페이스에 관련된 구성 및 구현은 I 인터페이스 클래스에서 진행합니다.
- C++ 인터페이스의 특징
- 추상 타입으로만 선언할 수 있는, Java, C#과 달리 언리얼은 인터페이스에서도 구현이 가능합니다.
같은 방식으로 Teacher, Staff 클래스를 생성했습니다.
일반적으로 Native C++ 에서 인터페이스 클래스란 넓은 범위에서 공통되는 특성을 추출해, 순수 가상 함수로 선언하고 상속 받는 객체에서 재정의를 통해 사용할 수 있는 클래스입니다.
즉, 상속 관계에서 함수 구현을 약속하는 클래스이며, 상태나 구현을 가질 수 없다고 알고있습니다.
하지만 언리얼 C++ 에서 인터페이스 클래스는 구현을 갖고 있고, 다중 상속을 통해 해당 인터페이스를 활용하는 모습을 확인할 수 있었습니다.
다중상속을 지양하는 저로써는 살짝 당황스러웠습니다. 마저 진행하겠습니다.
언리얼이 제공하는 동적 배열인 TArray를 사용해 언리얼 오브젝트를 생성하고 보관했습니다.
각 구성원들의 이름을 확인하고, 해당 구성원들이 ILessonInterface 클래스를 상속받는지 Cast 를 사용해 타입 형변환이 가능한지 체크하고 nullptr을 반환하면 그에 맞는 분기를 실행합니다.
언리얼 C++ 인터페이스 정리
1. 클래스가 반드시 구현해야 하는 기능을 지정하는데 사용합니다.
2. C++은 기본적으로 다중상속을 지원하지만, 언리얼 C++의 인터페이스를 사용해 가급적 축소된 다중상속의 형태로 구현하는 것이 향후 유지보수에 도움됩니다.
3. 언리얼 C++ 인터페이스는 두 개의 클래스를 생성합니다.
4. 언리얼 C++ 인터페이스는 추상 타입으로 강제되지 않고, 내부에 기본 함수를 구현할 수 있습니다.
* 언리얼 C++ 인터페이스를 사용하면, 클래스가 수행해야 할 의무를 명시적으로 지정할 수 있어 좋은 객체 설계를 만드는데 도움을 줄 수 있습니다.
'Unreal Engine 5 > 언리얼 C++' 카테고리의 다른 글
언리얼 C++ 설계 3 - 델리게이트 (Delegate) (0) | 2023.07.26 |
---|---|
언리얼 C++ 설계 2 - 컴포지션 (Composition) (0) | 2023.07.26 |
언리얼 C++ 인터페이스 클래스와 C++ 인터페이스 클래스와 차이점 (0) | 2023.07.26 |
언리얼 오브젝트 리플렉션 시스템 2 (0) | 2023.07.25 |
언리얼 오브젝트 리플렉션 시스템 1 (0) | 2023.07.25 |