UClass에 대해 자세히 설명시 별도의 문서 작성 수준이기에, 일단 간단히 설명해 보면 다음과 같다.
헤더 파일에 UObject를 적법하게 선언하면 UHT(Unreal Header Tool)가 헤더 파일을 분석하는 과정이 진행되며,
이 과정이 완료되면 Intermediate 폴더에 UObject의 정보를 담은 메타 파일이 생성된다.
이 메타 정보는 UClass 라는 특별한 클래스를 통해 보관되며, UObject의 다음의 정보들을 모두 기록하고 있다.
- 클래스 계층 구조 정보
- 멤버 변수
- 멤버 함수
이를 통해, 언리얼 엔진은 C++ 언어 자체가 지원하지 못하는 Reflection을 지원할 수 있다.
컴파일 단계에서는 개별 UObject의 UClass가 생성(Not instance, just declaration/definition)되고,
실행 초기의 런타임 과정에서는 UObject마다의 UClass의 인스턴스와 UObject의 인스턴스가 생성된다.
이 과정에서 생성되는 UObject의 인스턴스는 앞으로 월드에 생성될 UObject 인스턴스의 기본 셋팅을 지정하는데 사용되며, 이를 클래스 기본 객체(CDO : Class Default Object)라 한다.
언리얼 엔진에서 CDO를 만드는 이유는 UObject를 생성할 때마다 매번 초기화하지 않고,
클래스 기본 객체를 미리 만들어 놓고 복제하는 방식으로 구현되어 있기 때문이다.
월드에 동일한 Npc 몬스터를 수백마리 스폰시켜야 되는 상황을 생각해 보면, 그리고 해당 Npc 몬스터 하나하나가 그리 작지 않은 크기라면, 모든 Npc 몬스터를 처음부터 생성하는 방법보다 미리 큰 객체 덩어리를 복사한 뒤 속성 값만 변경하는 방법이 훨씬 효과적임을 알 수 있다.
참고로, UObject의 생성자 함수는 CDO를 생성하는데에만 사용된다.
즉, 엔진이 초기화되는 런타임 과정에서 생성자가 호출되는 것이지, 월드에 스폰될 때 생성되는 것이 아님을 헤깔리지 말자.
다시 정리하면, 엔진 초기 구동 런타임에 하나의 UObject가 초기화 될 때 다음 2개의 인스턴스가 함께 생성된다.
- UClass 인스턴스
- UObject의 CDO 인스턴스
마지막으로 언리얼 엔진은 모듈 방식으로 구현되는데, 개별 모듈마다 속한 모든 UObject의 초기화(UClass / CDO 인스턴스 생성)를 진행한다.
'언리얼 엔진 > C++' 카테고리의 다른 글
언리얼엔진 C++ Enum DisplayName 받아오는 법 (0) | 2022.04.05 |
---|---|
언리얼엔진 C++ Enum Blackboard에서 사용하는 법 (0) | 2022.04.04 |
언리얼엔진 C++ 가비지컬렉션 (0) | 2022.01.03 |
언리얼엔진 C++ 반환 값이 2개 이상일 경우에 사용하는 TTuple (0) | 2022.01.02 |
언리얼엔진 C++ Foot IK (7) | 2022.01.02 |