TObjectPtr은 멤버변수에서 UObject를 소유하고 관리할 때만 사용하며, 함수의 반환값과 지역변수는 소유권 없이 단순 참조만 하는 것이기 때문에 Raw포인터(UObject*)를 사용
1. 왜 멤버 변수에만 TObjectPtr를 사용하는가
TObjectPtr는 단순히 포인터를 담는 그릇이 아니라, 에디터 빌드에서 지연 로딩(Lazy Loading)과 액세스 추적(Access Tracking) 기능을 제공하기 위해 설계되어 있다.
- 직렬화(Serialization): 멤버 변수는 객체가 저장되거나 로드될 때 직렬화 대상이 된다.
TObjectPtr는 로드되지 않은 에셋을 가리킬 때 이를 자동으로 감지하고 관리하는 시스템과 긴밀하게 연결되어 있다. - 에디터 기능: 에디터에서 해당 객체가 사용 중인지 추적하는 등 개발 편의성을 제공한다.
2. 함수 반환값과 지역 변수에 Raw 포인터를 사용하는가
함수 내부에서 잠시 사용하거나 값을 넘겨줄 때는 위에서 언급한 '관리' 기능이 필요하지 않다.
- 성능과 단순함:
TObjectPtr는 Raw 포인터로 암시적 형변환(Implicit Conversion)이 가능하도록 설계되었다. 함수 인자나 지역 변수에서 굳이 복잡한 래퍼(Wrapper) 클래스를 유지할 오버헤드를 가질 이유가 없다. - 소유권의 부재: 지역 변수는 객체를 '소유'하는 것이 아니라, 이미 메모리에 올라와 있는 객체를 잠시 '참조'하여 작업하는 용도이다.
- 가독성: C++ 표준 및 언리얼 엔진 코드 컨벤션상, 일시적인 참조는
UObject*로 표현하는 것이 훨씬 명확하다.
3. 요약 및 권장 사용법
| 구분 | 권장 타입 | 비고 |
|---|---|---|
| 클래스 멤버 변수 | TObjectPtr |
UPROPERTY()와 함께 사용 필수 |
| 함수 매개변수 (Input) | UObject* |
호출자가 넘겨준 객체를 단순히 사용할 때 |
| 함수 반환값 (Return) | UObject* |
찾은 객체나 생성된 객체를 전달할 때 |
| 함수 내 지역 변수 | UObject* |
임시 계산이나 조건문 처리용 |
반응형
'언리얼 게임개발' 카테고리의 다른 글
| [팀 프로젝트 회고] 2026-04-24 | 팀 프로젝트 회고 (0) | 2026.04.27 |
|---|---|
| [TIL] 2026-04-16 | GameplayCueNotify에서 무기 소켓 위치 올바르게 가져오기 (0) | 2026.04.16 |
| [TIL] 2026-04-13 | UE5 멀티플레이 로비 - 캐릭터 외형 커스터마이징 시스템 설계 (0) | 2026.04.13 |
| [TIL] 2026-04-06 | UnrealEngine에서의 Null체크: IsValid(Thing), Thing.IsValid, !Thing의 차이점 (0) | 2026.04.06 |
| [팀 프로젝트] 2026-04-01 | Steam Session Subsystem 기획 (0) | 2026.04.01 |