작성
·
9
0
컴포지션 정보 구축 중.
NewObject 를 통해 하위 오브젝트를 생성 시, Outer, 즉 하위 오브젝트를 생성하는 주체가 생성하는 클래스라면 this 를 넣는데요.
이때 컴포지션 정보를 넣지 않거나 다르게 넣는다면, 가비지 등에서 해당 객체를 원하지 않는 타이밍에 삭제가 되거나 하는 문제가 발생할까요?
CDO 를 통해 생성자에서 하위 오브젝트를 생성시 일단 식별자(FName)만 기입하는데요. 이때는 알아서 컴포지션 정보 즉 생성주체의 정보가 생성자에게 알아서 들어가나요?
궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 충실한 전복님.
질문 주신 사항에 대해 설명드리겠습니다. 언리얼 엔진에서 NewObject
와 CreateDefaultSubobject
를 사용해 컴포지션을 만드는 방법에서 발생할 수 있는 몇 가지 차이와 관련된 개념을 명확히 하는 것이 포인트입니다.
NewObject
사용 시의 Outer
개념:
NewObject<UClassType>(Outer)
함수 내에서 Outer
란 생성된 객체가 의존하거나 속해 있는 객체를 의미합니다. this
를 통해 현재 클래스를 Outer
로 설정하는 이유는 생성된 객체가 포함될 다른 객체와 명확하게 연결되도록 하기 위함입니다.Outer
를 명확히 지정하지 않거나 틀리게 설정하면, 언리얼 엔진의 가비지 컬렉션(Garbage Collection) 정책에 의해 해당 객체가 예상치 못한 시점에 해제될 수 있습니다. 이는 객체의 소유권과 수명 주기 관리와 직접적으로 관련이 있어 객체가 해제될 시점을 정확히 예측하거나 제어할 수 없게 됩니다.CDO 사용 시 생성자에서 하위 객체 생성 및 정보 전달:
CreateDefaultSubobject
를 사용하여 객체를 초기화할 때, FName
을 지정하는 것은 주로 식별을 위한 것이며, 엔진 내부적으로 클래스의 CDO(Class Default Object)에서 기본적으로 필요한 모든 설정이 이루어집니다.Outer
)로부터 관리되며, 적절하게 설정됩니다. 이러한 설정은 클래스의 구조와 상속 관계, 그리고 전반적인 콘텐츠 구성 구조를 유지하는 데 필수적입니다.질문 내용을 보다 깊이 이해하는 데 도움이 될 만한 유사한 질문과 답변 링크를 드리겠습니다:
CreateDefaultSubobject
함수에서 FName을 지정할 때 유의할 점과 각 클래스 내에서의 이름 사용에 관한 논의가 다루어졌습니다.이런 기초적인 구조와 정책이 이해가 된다면, 보다 복잡한 언리얼 C++ 프로그래밍에서 객체 생성 및 관리가 용이해질 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.