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

왕만두님의 프로필 이미지
왕만두

작성한 질문수

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

12강 언리얼 엔진의 메모리 관리

UPROPERTY로 선언되지 않은 언리얼 오브젝트에 대한 궁금증이 있습니다

작성

·

263

·

수정됨

0

애초에 언리얼 오브젝트가 UPROPERTY로 선언이 되지 않았다는 것은, 가비지 컬렉터에 의해 관리되지 않고 있다는 것으로 이해했습니다.

그리고 유효하지 않다는 것의 의미 또한 언리얼 오브젝트가 가비지 컬렉션에 의해 관리되지 않고 있다는 것으로 이해했습니다.
그렇다면 NonPropStudent는 시작부터 "유효하지 않은 언리얼 오브젝트"여야 하지 않나요?

왜 3초가 지나기 전에 Shutdown을 시키면 UPROPERTY로 선언되지 않은 오브젝트 객체인 NonPropStudent 가 "유효한 언리얼 오브젝트"라고 로그가 뜨는 건가요?

 

언리얼 오브젝트가 가비지 컬렉터에 의해 회수가 되는 것과 애초에 가비지 컬렉터에 의해서 관리되지 않는 것은 다른 의미 아닌가요?

답변 2

0

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

네 엄밀하게는 가비지 컬렉터 시스템에 등록이 되었는가와 유효한 언리얼 오브젝트라는 것은 다른 개념이라서요, 그렇기 때문에 현업에서도 UPROPERTY를 종종 빼먹는 실수가 나옵니다.
그래서 스스로 엄밀하게 잘 체크해주셔야 합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 왕만두님의 질문에 대해 답변 드리겠습니다.

UPROPERTY로 선언되지 않은 언리얼 오브젝트가 가비지 컬렉터에 의해 관리되지 않는다는 것은 사실입니다. 이는 해당 객체가 가비지 컬렉션의 대상이 되지 않아, 자동으로 메모리에서 회수되지 않음을 의미합니다. 단, 이것이 NonPropStudent가 “유효하지 않은 언리얼 오브젝트”로 시작한다는 것을 직접적으로 의미하는 것은 아닙니다.

언리얼 엔진에서의 “유효한 오브젝트”란 단순히 메모리 상에 존재하고 접근할 수 있는 오브젝트를 의미합니다. 따라서, 프로그램이 실행되는 동안에는 NonPropStudent와 같이 UPROPERTY로 선언되지 않은 오브젝트도 유효한 오브젝트로 처리될 수 있습니다. 그러나, UPROPERTY로 선언된 오브젝트들과 달리, 가비지 컬렉터에서 관리되지 않기 때문에 메모리 누수 문제나 댕글링 포인터 문제가 발생할 수 있는 위험이 있습니다.

실제로 Shutdown 시의 로그에서 NonPropStudent가 “유효한 언리얼 오브젝트”라고 뜨는 것은, 그 시점까지 메모리 상에 해당 오브젝트가 유효하게 존재하고 있음을 나타냅니다. 하지만, 가비지 컬렉터에 의해 관리되지 않는 오브젝트는 명시적으로 해제하거나 관리하지 않는 경우 메모리가 해제되지 않아 누수가 발생할 수 있습니다.

가비지 컬렉터의 회수 대상이 되는 오브젝트와 되지 않는 오브젝트 사이의 주요 차이점은 메모리 관리 방식에 있으며, 두 오브젝트 모두 프로그램 실행 중에는 “유효한” 상태로 동작할 수 있습니다.

이와 관련하여 유사한 내용을 다룬 질문과 답변이 있어 링크를 첨부합니다:
- 메모리 관련 부분에서 질문입니다. - 이 링크에서는 UPROPERTY로 선언한 오브젝트와 그렇지 않은 오브젝트의 가비지 컬렉터 관리에 대한 질문과 답변을 확인할 수 있습니다.

왕만두님의 질문에 대한 이해를 돕기 위해 이와 관련된 정보를 제공해 드렸습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

왕만두님의 프로필 이미지
왕만두

작성한 질문수

질문하기