1. 서두
1.1. 접두사
- U 접두사 : UObject를 직접·간접 상속받는 클래스이며, 블루프린트·GC·리플렉션이 지원됨
- F 접두사 : UObject가 아닌 Struct/Plain Class이며, GC 관리를 외부에 맡김
- A 접두사 : AActor의 파생 클래스

- Image : UE Objects Hierarchy
1.2. 헤더
- 권장 include 순서
- 자신의 헤더 (
"MyClass.h")
- 엔진·외부 헤더 (
<Engine/Whatever.h>, <ThirdParty/Whatever.h>)
- 프로젝트 내부 다른 헤더 (
"OtherModule/SomeClass.h")
- 엔진 모듈별 공용 헤더 (
<CoreMinimal.h>, <GameplayTags/GameplayTagContainer.h> 등)
- 표준 라이브러리 / STL ****(
<vector>, <memory> 등)
- 헤더 파일에서는 “class_name”.generate.h가 가장 아래에, cpp 파일에서는 “class_name”.h가 가장 위에 있어야 함
- CoreMinimal.h : 언리얼 엔진 내 각 C++ 클래스가 사용할 가능성이 있는 많은 헤더들을 기본적으로 포함하도록 설계된 헤더 파일. 언리얼 오브젝트가 동작할 수 있는 최소 기능만을 제공함
1.3. 자료형과 자료 구조
- 문자 포맷
- TChar : UE에서 사용되는 문자 배열. 유니코드를 위한 언리얼 표준 캐릭터 타입
- FName : 에셋 관리를 위해 사용되는 문자열 체계. 가볍고 빠르지만, 대소문자 구분이 없고 한 번 선언 시 수정할 수 없음
- FText : 다국어 지원을 위한 문자열 관리 체계. 유저에게 보여지는 모든 텍스트는 FText 클래스를 사용해야 하며, 특히 UMG 텍스트 컴포넌트에서 사용됨
- FString : FName, FText와 달리 텍스트 조작이 가능한 힙 기반 동적 문자열 컨테이너. 대소문자 변환, 부분문자열 발췌, 역순 등의 함수를 제공함
- 자료 구조
- UCL : 범용적이지만 기능이 많이 컴파일 시간이 오래 걸리는 STL 대신 사용하는, UE에 최적화 된 라이브러리
- TArray, TSet, TMap, TMultiMap 등이 있음
- UScriptStruct : 언리얼 구조체. GENERATED_BODY()를 선언해야 하며, UPROPERTY 선언은 가능하지만 UFUNCTION과 NewObject는 사용이 불가능함
1.4. 메모리 관리
- GC : UE에서 가비지 컬렉션은 Mark-Sweap 방식으로 진행함
- GUObjectArray : 관리하는 모든 언리얼 오브젝트의 정보를 담는 전역 변수. 아래와 같은 두 개의 flag가 존재함
- Garbage flag : 다른 언리얼 오브젝트로부터 참조가 없어 회수될 예정임을 나타냄
- RootSet flag : 참조가 없어도 회수되지 않는 특별한 오브젝트를 나타냄
- 메모리 누수 문제는 GC로, 댕글링 포인터는 탐지를 위해 IsValid 함수로, 와일드 포인터 문제는 UPROPERTY()를 통해 자동으로 nullptr로 지정되어 해결함
- C++오브젝트를 GC에 넣기 위해선 FGCObject를 상속받아 AddReferencedObjects를 정의해 주어야 함
1.5. 리플렉션
- UCLASS : 해당 클래스가 언리얼 오브젝트 시스템에 의해 관리될 것을 명시함
- BlueprintType : C++ 클래스를 블루프린트에서 변수로 선언이 가능한 타입으로 지정
- Blueprintable : 블루프린트에서 C++ 클래스를 상속 가능