언리얼 엔진의 모든 객체의 기본 클래스이다.
Actor, Conmponent 등 대부분의 UE 클래스가 UObject 를 상속 받는다.
각 UClass 가 생성될 때 만들어지는 기본 객체이다.
게임 실행 전 기본 값을 가지고 있고, 인스턴스를 만들 때 이 CDO 의 값이 복사된다.
주로 디폴트 값 설정, 프로퍼티 초기화의 용도로 활용된다.
| 클래스 | 역할 | 생존 범위 |
|---|---|---|
| GameInstance | 전체 게임 세션 동안 유지되는 데이터 | 클라이언트 + 서버 (항상 살아 있음) |
| GameMode | 게임 규칙, 승패, 스폰 등 게임 로직 담당 | 서버 전용 (레벨 전환 시 파괴) |
| GameState | 현재 게임 상태 공유 (점수, 시간 등) | 서버 + 클라이언트 (레벨 전환 시 파괴) |
| PlayerState | 플레이어별 상태 (HP, 점수, 이름 등) | 서버 + 클라이언트 (항상 살아 있음) |
| 클래스 | 활용 경험 |
|---|---|
| GameInstance | 게임 전체 점수 |
| GameMode | 플레이어, AI 스폰 및 레벨 전환 등 게임 플로우 로직 |
| GameState | 실시간 점수 동기화 및 UI 업데이트 |
UObject 기반 객체는 레퍼런스 카운트 기반이 아닌, 가비지 컬렉터가 주기적으로 참조를 탐색한다.
UPROPERTY 로 선언된 포인터만 가비지 컬렉션이 추적이 가능하다.
AddToRoot() 함수를 통해 수동으로 관리할 수도 있다.
가비지 컬렉션은 순환 참조를 방지하고 메모리 안전성을 확보하기 위해 사용된다.
| 타입 | 기능 |
|---|---|
| TSharedPtr | 참조 카운트 기반, 메모리 자동 해제 |
| TWeakPtr | 약한 참조, 소유권 없음, nullptr 체크 필요 |
| TUniquePtr | 단독 소유, 이동 가능, 복사 불가 |
https://velog.io/@dfdeer/CC-모의-면접-질문-리스트
부분을 보면 스마트 포인터에 대한 설명이 상세히 적혀있다.
| 메서드 | 설명 |
|---|---|
| StaticClass() | 클래스 자체를 반환. 객체 없이 호출 가능 |
| GetClass() | 객체 인스턴스에서 호출, 해당 객체의 클래스 반환 |
TSubclassOf 변수 초기화 -> StaticClass()
런타임 객체 타입 체크 -> GetClass()
탬플릿 클래스로, 특정 클래스의 자식 클래스 타입만 가질 수 있는 안전한 포인터이다.
| 구분 | 설명 |
|---|---|
| IsValid(Object) | UObject 가 유효하고 GC 에 의해 삭제되지 않았는지 확인 |
| == nullptr | 단순히 포인터가 nullptr 인지 확인 |
| 종류 | 역할 |
|---|---|
| FString | 문자열 저장, 수정/복사 가능 |
| FName | 해시 기반, 식별자/키로써 사용, 성능 좋음 |
| FText | 로컬라이제이션 가능, UI용 |
| 종류 | 역할 |
|---|---|
| Behavior Tree (BT) | AI 의사결정 트리, 조건과 액션 기반 |
| FSM (Finite State Machine) | 상태 전환 기반, 단순 AI, UI 상태 관리 |
적 NPC AI -> BT 로 추적, 공격, 도망 패턴 구현