채널톡 아이콘

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

김민재님의 프로필 이미지

작성한 질문수 8

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

13강 언리얼 오브젝트 관리 I - 직렬화

FArchive 포인터의 해제 질문, 직렬화 BufferArray 질문

작성

·

45

0

안녕하세요.

파일을 읽고 쓸 때 FArchive* 객체를 CreateFileWriter나 Reader함수를 통해 생성한 후, 해제를 꼭 해주시는데요.

저 Create함수 내부적으로 동적 할당을 진행하는 것이기 때문인가요?

또한, UObject클래스의 객체 정보를 직렬화 할 때 Buffer가 따로 필요한 이유가 궁금합니다.

마지막으로, 직렬화 된 UObject 객체를 Read할 때만 FMemoryReader가 필요한지 궁금합니다.

답변 2

0

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

네 맞습니다.

그래야 하는 이유는 없고 언리얼 개발자들이 API를 그렇게 설계했기에 따라야 하는데, 동적할당의 경우 만일 스택을 사용한다면 너무 큰 데이터는 문제가 생기겠지요.

0

인프런 AI 인턴님의 프로필 이미지

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

FArchive 객체의 해제와 관련하여 몇 가지 중요한 사항이 있습니다.

  1. FArchive 객체의 해제: CreateFileWriterCreateFileReader 함수는 동적 메모리 할당을 통해 FArchive 객체를 생성합니다. 따라서, 사용이 끝난 후에는 해제를 통해 메모리를 관리해 주어야 합니다. 일반적으로 언리얼 엔진에서는 스마트 포인터를 사용하여 메모리를 자동으로 관리하는 것이 권장되지만, 경우에 따라 수동으로 메모리를 해제할 필요가 있습니다.

  2. Buffer 필요성: 직렬화(BufferArray)가 필요한 이유는 데이터를 직렬화할 때 메모리나 파일과 같은 외부 매체로 데이터를 전송하는 과정에서 임시 저장 공간이 필요하기 때문입니다. 이를 통해 데이터를 일관되게 관리하고, 각종 입력/출력 처리를 용이하게 할 수 있습니다. TArray 형태가 일반적으로 선호되는 이유는 바이트 단위로 데이터를 관리하기 용이하기 때문입니다.

  3. FMemoryReader의 필요성: FMemoryReader는 메모리에서 데이터를 읽어올 때 사용됩니다. 직렬화된 데이터가 메모리에 저장되어 있다면 이를 특정 객체에 역직렬화(Deserialization)하여 읽어들이기 위해 FMemoryReader를 사용합니다. FMemoryReader는 메모리에 저장된 데이터를 직접 객체로 변환하는 데 필요한 도구 역할을 합니다.

김민재님이 질문하신 내용을 바탕으로 유사한 질문을 다룬 기존의 질문과 답변을 몇 가지 추천드리겠습니다:

  1. 13강 언리얼오브젝트를 직렬화할 때는 반드시 메모리 아카이브(FMemoryReader, FMemoryWriter)를 거쳐서 직렬화를 해야 하는 건가요?

    • 해당 게시물에서는 FArchive의 사용법 및 FMemoryReader/Writer에 대한 정보가 다루어지고 있습니다.
  2. IFileManager::Get().CreateFileWriter로 생성된 객체 delete

    • 여기에서는 FArchive의 메모리 관리 측면에 대한 설명이 포함되어 있습니다.

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