작성
·
270
·
수정됨
0
애초에 언리얼 오브젝트가 UPROPERTY
로 선언이 되지 않았다는 것은, 가비지 컬렉터에 의해 관리되지 않고 있다는 것으로 이해했습니다.
그리고 유효하지 않다는 것의 의미 또한 언리얼 오브젝트가 가비지 컬렉션에 의해 관리되지 않고 있다는 것으로 이해했습니다.
그렇다면 NonPropStudent
는 시작부터 "유효하지 않은 언리얼 오브젝트"여야 하지 않나요?
왜 3초가 지나기 전에 Shutdown을 시키면 UPROPERTY
로 선언되지 않은 오브젝트 객체인 NonPropStudent
가 "유효한 언리얼 오브젝트"라고 로그가 뜨는 건가요?
언리얼 오브젝트가 가비지 컬렉터에 의해 회수가 되는 것과 애초에 가비지 컬렉터에 의해서 관리되지 않는 것은 다른 의미 아닌가요?
답변 2
0
네 엄밀하게는 가비지 컬렉터 시스템에 등록이 되었는가와 유효한 언리얼 오브젝트라는 것은 다른 개념이라서요, 그렇기 때문에 현업에서도 UPROPERTY를 종종 빼먹는 실수가 나옵니다.
그래서 스스로 엄밀하게 잘 체크해주셔야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 왕만두님의 질문에 대해 답변 드리겠습니다.
UPROPERTY
로 선언되지 않은 언리얼 오브젝트가 가비지 컬렉터에 의해 관리되지 않는다는 것은 사실입니다. 이는 해당 객체가 가비지 컬렉션의 대상이 되지 않아, 자동으로 메모리에서 회수되지 않음을 의미합니다. 단, 이것이 NonPropStudent
가 “유효하지 않은 언리얼 오브젝트”로 시작한다는 것을 직접적으로 의미하는 것은 아닙니다.
언리얼 엔진에서의 “유효한 오브젝트”란 단순히 메모리 상에 존재하고 접근할 수 있는 오브젝트를 의미합니다. 따라서, 프로그램이 실행되는 동안에는 NonPropStudent
와 같이 UPROPERTY
로 선언되지 않은 오브젝트도 유효한 오브젝트로 처리될 수 있습니다. 그러나, UPROPERTY
로 선언된 오브젝트들과 달리, 가비지 컬렉터에서 관리되지 않기 때문에 메모리 누수 문제나 댕글링 포인터 문제가 발생할 수 있는 위험이 있습니다.
실제로 Shutdown 시의 로그에서 NonPropStudent
가 “유효한 언리얼 오브젝트”라고 뜨는 것은, 그 시점까지 메모리 상에 해당 오브젝트가 유효하게 존재하고 있음을 나타냅니다. 하지만, 가비지 컬렉터에 의해 관리되지 않는 오브젝트는 명시적으로 해제하거나 관리하지 않는 경우 메모리가 해제되지 않아 누수가 발생할 수 있습니다.
가비지 컬렉터의 회수 대상이 되는 오브젝트와 되지 않는 오브젝트 사이의 주요 차이점은 메모리 관리 방식에 있으며, 두 오브젝트 모두 프로그램 실행 중에는 “유효한” 상태로 동작할 수 있습니다.
이와 관련하여 유사한 내용을 다룬 질문과 답변이 있어 링크를 첨부합니다:
- 메모리 관련 부분에서 질문입니다. - 이 링크에서는 UPROPERTY
로 선언한 오브젝트와 그렇지 않은 오브젝트의 가비지 컬렉터 관리에 대한 질문과 답변을 확인할 수 있습니다.
왕만두님의 질문에 대한 이해를 돕기 위해 이와 관련된 정보를 제공해 드렸습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.