Inflearn Community Q&A
TObjectPtr 설명 질문
Resolved
Written on
·
28
0
영상에서 TObjectPtr의 기능을 설명하실 때 shared_ptr의 개념과 유사하게 설명해주신 것처럼 들렸습니다.
하지만 제가 이해하기로는 TObjectPtr은 reference counting을 사용하는 스마트 포인터라기보다는,
로우 포인터 대신 UObject에 대한 핸들을 보관하여 GC 추적이나 객체 relocation 등에 대응하기 위한 포인터 타입으로 알고 있습니다.
제가 이해한 내용이 맞는지 궁금합니다.
혹시 제가 잘못 이해한 부분이 있다면 설명해주시면 감사하겠습니다.
Answer 2
1
안녕하세요 fhan님 🙂
질문 주신 내용이 정확합니다. TObjectPtr은 shared_ptr과 같은 Reference Counting(참조 횟수) 기반이 아닙니다.
제가 영상에서 누가 가리키고 있는지 판단한다고 설명드린 부분은, 가비지 컬렉터(GC)가 Reachability(도달 가능성)를 판단하는 과정을 의미한 것입니다. 작동 방식의 차이는 shared_ptr은 스스로 숫자를 세지만, TObjectPtr은 그 자체로 숫자를 세지 않습니다. 대신 엔진의 GC가 주기적으로 UPROPERTY로 선언된 TObjectPtr들을 훑으며 이 포인터가 아직 객체에 도달 가능한지를 체크합니다.
TObjectPtr은 말씀하신 대로 로우 포인터 대신 일종의 핸들 역할을 하며, 에디터 빌드에서는 객체가 메모리에서 이사(Relocation)를 가거나 지연 로딩(Lazy Loading)될 때 이를 유연하게 추적하기 위한 장치입니다.
결론적으로 메모리를 자동으로 관리하기 위해 참조를 추적한다는 목적은 스마트 포인터와 유사하지만, 내부적으로 숫자를 세느냐 아니면 경로를 확인하느냐의 메커니즘 차이가 있다고 이해하시면 완벽합니다.
좀 더 쉬운 이해를 위해서 헷갈릴만한 부분은 빼고 GC와 TObjectPtr에 대해서 분리해서 재촬영했으니 확인해주세요 🙂
0
안녕하세요, 인프런 AI 인턴입니다. fhan님.
TObjectPtr에 대한 질문을 주셨군요. TObjectPtr은 언리얼 엔진에서 메모리 관리 및 쓰레드 안정성을 개선하기 위해 제공되는 포인터 타입입니다. 일반적으로 TObjectPtr은 로우 포인터가 아니라 언리얼 엔진의 가비지 컬렉션(GC) 체계와 더 잘 연동되는 스마트 포인터와 같은 역할을 합니다.
핸들 관리 및 GC 통합: TObjectPtr은 가비지 컬렉터가 UObject의 생명주기를 추적하고 관리할 수 있도록 특별한 핸들을 저장합니다. 이를 통해 UObject가 메모리에서 안전하게 관리될 수 있으며, 객체가 언리얼 엔진의 가비지 컬렉션에 의해 자동으로 정리됩니다.
리소스 안정성: 로우 포인터를 사용하면 가비지 컬렉션이 객체를 삭제한 후에도 포인터가 여전히 남아 있을 수 있어 다양한 문제가 발생할 수 있습니다. TObjectPtr은 이러한 문제를 예방하는 데 도움을 줍니다.
Reference Counting과의 차이: TObjectPtr은 C++ 표준 라이브러리의
shared_ptr처럼 reference counting을 직접적으로 사용하지는 않습니다. reference counting은 객체의 참조 수를 추적하여 참조가 0이 되면 메모리를 해제하는 방식입니다. 그러나 TObjectPtr은 로우 포인터와 달리 엔진 내부의 객체 관리를 신속히 이용할 수 있는 안전한 방식으로 UObject를 가리킵니다.
귀하께서 이해하신 바와 같이, TObjectPtr은 shared_ptr과 같은 방식의 reference counting을 사용하지 않으며, 주로 언리얼 엔진의 GC 및 메모리 관리 메커니즘과 일관성을 유지하기 위해 설계되었습니다.
보다 구체적인 이해를 위해, 언리얼 엔진 문서를 참조하시거나 관련 포럼을 통해 다양한 참고 자료를 찾아보시는 것도 좋은 방법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






답변 감사합니다!