[UE5] Asset Editor 상속 구조
언리얼 엔진에서는 에셋 에디터는 여러 클래스들을 상속받고 있는데 대략적인 상속 구조는 아래와 같습니다.

여기서 실제로 에셋 에디터로서 활용되는 클래스는 FAssetEditorToolkit, FSimpleAssetEditor, FWorkflowCentriApplication 클래스이고
그 중에서 에디터를 커스터마이징 하기위해서는 FAssetEditorToolkit 혹은 FWorkflowCentricApplication을 상속받아 진행됩니다.
1. IToolkit

최상위 인터페이스 목적으로 설계된 클래스로, 대부분의 함수가 가상함수로 선언 되어있는 것을 볼 수 있습니다.
위의 상속구조를 통해 생성되는 에디터들은 이 API 인터페이스들을 따르게 됩니다.
특히 RegisterTabSpawners() 함수와 UnregisterTabSpawners() 함수가 있는데, 이 함수들은 탭을 등록하고 해제되는데 사용되는 함수로 자주 사용됩니다.
2. IAssetEditorInstance

에디터에서 윈도우창과 관련된 기능을 처리하는 클래스 입니다.
이름 앞에 I가 붙은 것처럼 대부분의 함수들이 가상함수로 되어있어 인터페이스만 제공하고 있다는 것을 볼 수 있습니다.
대표적으로 현재 열린 에셋 에디터의 포커스를 준다거나, 창을 닫아주는 함수들이 존재합니다.
3. FBaseToolKit

IToolkit을 상속받아 대부분의 함수를 구현하는 클래스.
언리얼에서 존재하는 Toolkit 들의 부모가 되는 클래스 입니다.
탭을 등록하고 해제하는 함수 및 여러 기본 기능과 인터페이스를 제공하고 있습니다.
4. TSharedFromThis<T>
클래스를 스마트 포인터로 관리하기 위해 상속받는 TSharedFromThis 템플릿 클래스 입니다.
5. FAssetEditorToolkit

에셋 에디터 커스터마이징을 하기 위해 상속받는 Toolkit 인 FAssetEditorToolkit 입니다.
부모 클래스에서 받은 함수의 대부분이 오버라이드 되어서 정의되고 있습니다.
이 중 InitAssetEditor()함수는 에디터를 초기화하는데 사용되는 함수로 이 클래스를 상속받는 클래스들은 에셋 에디터 커스터마이징하는 과정에서 이 클래스를 사용해야 합니다
6. FSimpleAssetEditor

SimpleAssetEditor 클래스로 프로퍼티로 등록된 변수들을 에셋 에디터에서 표시하는 역할을 하는 간단한 클래스입니다.
7. FWorkflowCentricApplication

AssetEditorToolkit 는 단일의 툴을 만드는데 사용하고 WorkflowCentricApplication 은 그룹화 되어 있는 툴을 만들기 위해 상속받아 사용한다고 생각하시면 이해하기 편합니다

한가지 예로, 비헤이비어 트리에서 에셋 에디터는 위와 같은 인터페이스를 제공합니다.
비헤이비어 트리뿐만 아니라 블랙보드도 바로 접근해서 처리가 가능하도록 툴을 제공하고 있습니다.
이것처럼 하나의 에디터에서 여러가지 툴을 묶어서 활용해야 할 경우 각 툴을 애플리케이션 모드로 하고 상태 패턴처럼 모드에 따라 다른 기능을 하는 툴을 만들 때 이 WorkflowCentricApplication 을 상속받아 작업합니다