강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

312님의 프로필 이미지
312

작성한 질문수

실전! 언리얼 소울라이크 개발: A to Z

타겟팅 시스템

TObjectPtr이 아니고, 일반 포인터로 구현하신 이유가 있을까요?

해결된 질문

작성

·

140

0

언리얼에서 TObjectPtr로 선언하는 것이 GC와 같은 추가적인 기능에 대해서 이점이 있기에, 일반 포인터보다 선호된다고 알고 있었는데

혹시 일반 포인터로 선언하신 이유가 무엇이신지 궁금합니다!

답변 2

0

Spector님의 프로필 이미지
Spector
지식공유자

안녕하세요. 312님.

TObjectPtr은 원시포인터 대비 UObject 처리 시 여러 추가 기능을 제공하는 것이 맞습니다.

가비지 컬렉션으로 객체가 삭제될 때 자동으로 nullptr 설정, 참조 추적, 향상된 디버깅 지원 등이 대표적입니다.

다만 이러한 기능들은 대부분 에디터 환경에서만 동작합니다. 최종 배포 빌드에서는 성능 최적화를 위해 TObjectPtr이 모두 원시포인터로 컴파일되기 때문입니다.

따라서 에디터에서 제공하는 추가 기능들을 활용하지 않는다면 TObjectPtr 사용이 필수는 아닙니다.

물론 향후 언리얼 엔진 버전에서의 추가 지원, 코드베이스 일관성, 개발 단계에서의 디버깅 편의성 등을 고려하여 사용하는 것이 최근 추세이긴 합니다.

본 강의 프로젝트에서는 이러한 고급 기능들을 다루지 않으므로 원시포인터를 사용하고 있습니다.

수강자분께서는 학습 목적에 따라 TObjectPtr을 사용하셔도 전혀 문제없습니다.

 

그럼 좋은하루 되시길 바랍니다^^

 

312님의 프로필 이미지
312
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 312님.

TObjectPtr를 사용하지 않고 일반 포인터를 사용하는 이유는 여러 가지 상황에 따라 다를 수 있습니다. 언리얼 엔진에서 TObjectPtr는 가비지 컬렉션(GC)을 활용한 메모리 관리를 통해 참조되는 객체의 수명을 자동으로 관리할 수 있다는 이점이 있지만 항상 가장 좋은 선택이 되는 것은 아닙니다. 일반 포인터를 사용하는 경우는 다음과 같은 이유에서일 수 있습니다:

  1. 성능 최적화: 일반 포인터는 오버헤드가 적어 높은 성능이 필요한 상황에서 사용될 수 있습니다. 예를 들어, 성능이 중요한 게임 루프 안에서는 TObjectPtr의 관리 오버헤드가 문제를 일으킬 수도 있습니다.

  2. 메모리 관리의 명확성: 일반 포인터는 메모리 할당과 해제를 명확히 지정할 수 있기 때문에 메모리 사용을 보다 세밀하게 제어할 수 있습니다. 이로 인해 메모리 관리가 명확하고 예측 가능해지는 경우가 있습니다.

  3. 특정 용도의 제한적 사용: 일부 시나리오에서는 객체의 수명이 프로그래머에 의해 명확히 관리될 수 있는 한정된 환경에서 일반 포인터를 사용하는 것이 적합합니다.

  4. 기타 이유: 프로젝트의 요구사항이나 코드 스타일, 호환성 등의 이유로 일반 포인터를 사용하기도 합니다.

아래 링크에서 TObjectPtr의 활용과 관련한 더 구체적인 내용을 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

312님의 프로필 이미지
312

작성한 질문수

질문하기