Part1 07. 언리얼 C++ 설계 : 인터페이스하고싶은거/Unreal2024. 3. 9. 10:16
Table of Contents
언리얼 C++ 인터페이스
인터페이스 interface
특정 기능, 행동을 구현하는 추상적인 형식.
다형성(같은 이름의 메서드가 다른 동작가능, 오버라이딩), 의존성 분리(약한 결속)
언리얼 엔진에서 인터페이스 예시
: 월드에 배치되는 Actor 오브젝트가 있다. 그리고 Actor중에는 움직이는 오브젝트 Pawn이 있다.
Pawn은 길찾기 시스템을 포함해야할 때, 길찾기 시스템은 INavAgentInterface에 구현해서 Pawn이 사용한다.
언리얼 인터페이스 특징
- 인터페이스 생성시
- UInterface : 클래스 타입정보 제공, 런타임에서 인터페이스 구현 여부를 파악하는데 사용
- IInterface : 실질적인 설계 및 구현
- 기존 C++ 인터페이스는 순수가상함수로만 정의하지만, 언리얼은 구현이 가능하다.
언리얼 인터페이스 실습
상황
1. 학교에서 Person 밑에 Student, Teacher, Staff 3가지 직업군을 만든다. : 리플렉션 시스템 구축후 UObject로 만듬
2. 이들 중 Student, Teacher만 "수업에 참여한다." 라는 행동을 구현한다. : UINTERFACE로 기능 구현 후 상속
2번만 작성해본다.
- 10줄 UINTERFACE와 19줄 ILESSONINTERFACE가 생성된걸 알 수 있는데, 설명했듯이 ILESSONINTERFACE에 기능을 작성하면 된다.
- 기능 작성에는 크게 2가지가 있는데
- 순수가상함수, 추상클래스 작성 : 기존 C++에서 사용하던 방법으로, 상속받는 클래스는 인터페이스에 작성된 함수, 클래스를 구현해주어야 한다.
- 가상함수 작성 : 언리얼C++에서는 인터페이스내에 기능을 구현하는 것이 가능하다. 이러한 경우에는 하위 클래스에 무조건 구현하지 않아도 된다.
- 인터페이스의 하위클래스에는 7줄 LessonInterface.h를 헤더에 선언한다.
- 14줄 public ILessonInterface처럼 상속을 해주어야 한다.
- 다만, 현재 Teacher.h는 UPerson을 먼저 상속받았으므로, ILessonInterface에 작성한 DoLesson함수를 override받으려면, 다음과 같이 Super을 사용하지 못하고 직접적으로 호출해야한다. (13줄)
현재 2. 이들 중 Student, Teacher만 "수업에 참여한다." 라는 행동을 구현한다. 으로 인해 Staff에는 인터페이스를 상속하지 않았다. 이를 검증하기 위해 MyGameInstance에서 확인해본다.
- 19줄 TArray(동적배열, 가변 배열)로 오브젝트를 구현했다.
- 21줄 const auto를 사용해서 배열을 순차적으로 반복한다.
- 29줄 Cast<ILessonInterface>(Person) 캐스팅 형변환
- 인터페이스를 상속받았는지 여부를 파악
- 상속받지 않으면 null이 넣어지게 된다.
'하고싶은거 > Unreal' 카테고리의 다른 글
Part1 09. 언리얼 C++ 설계 : 델리게이트 (0) | 2024.03.10 |
---|---|
Part1 08. 언리얼 C++ 설계 : 컴포지션 (0) | 2024.03.10 |
Part1 05.06. 언리얼 리플렉션 시스템 (프로퍼티 시스템) (0) | 2024.03.08 |
Part1 04. 언리얼 오브젝트 (0) | 2024.03.03 |
Part1 03. 기존 C++과 다른 언리얼 C++ (0) | 2024.03.02 |
@ssIIIn :: 두 번째 저장공간
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!