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

TechN0·2025년 3월 10일

직렬화가 무야

  • 오브젝트나 연결된 오브젝트의 묶음(오브젝트 그래프)을 바이트 스트림으로 변환하는 과정
    • 복잡한 데이터를 일렬로 세우기 때문
  • 복구시키는 과정도 포함
    • 시리얼라이제이션: 오브젝트 그래프 → 바이트 스트림 으로
    • 디시리얼라이제이션: 바이트 스트림 → 오브젝트 그래프 로
  • 장점
    • 현재 프로그램 상태 저장해 필요시 복원 가능(게임 저장)
    • 현재 객체의 정보를 클립보드에 복사해 다른 프로그램 전송 가능
    • 네트워크 통해 현재 프로그램 상태 다른 PC에서 복원 가능(멀티플레이)
    • 데이터 압축, 압호화 통해 데이터 효율적, 안전하게 보관

직렬화 구현 시 고려사항

  • 데이터 레이아웃: 오브젝트가 소유한 데이터를 변화할 건지
  • 이식성: 서로 다른 시스템에 전송해도 이식 가능한지
  • 버전 관리: 기능 추가 시 어떻게 확장하고 처리할 건지
  • 성능: 네트웍 비용 줄이기 위해 어떤 데이터 형식 사용할 건지
  • 보안: 데이터 어떻게 보호할건지
  • 에러 처리: 전송과정 문제 발생 시 어떻게 인식하고 처리할 건지

언리얼은 이걸 모두 고려한 직렬화 시스템 자체 제공

언리얼 직렬화 시스템

  • FArchive
    • 직렬화 시스템을 위해 제공하는 클래스
    • Shift(<<) 연산자 사용해 전송시 원하는 바이트 스트림 저장 가능
  • 다양한 아카이브 클래스 제공
    • 메모리 아카이브
    • 파일 아카이브
    • 기타 언리얼 오브젝트 관련 아카이브 클래
  • Json 직렬화 기능: 별도 라이브러리 통해 제공

+

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

C++

  • 메모리를 포인터 활용해 관리
  • new , dekete쌍을 지켜주지 않으면 터짐

가비지 컬렉션

  • 더이상 사용되지 않는다 판단된 메모리를 회수
  • 동적 생성된 오브젝트 정보를 모아둔 저장소 이용해 미사용 메모리 추적
  • 언리얼은 마크 스왑 방식으로 가비지 컬렉션 동작
  • 지정 시간마다 수행하는 방식

UPROPERTY로 참조된 언리얼 오브젝트, 루트셋으로 지정된 언리얼 오브젝는 가비지 컬렉터가 회수 안함

14. 언리얼 오브젝트 관리 II - 패키지

패키지

  • 언리얼 오브젝트를 감싼 포장 오브젝트
  • 개발된 최종 콘텐츠를 정리해 프로그램으로 만드는 작업 ex) 게임 패키징
  • DLC 등 향후 확장 콘텐츠에 사용되는 별도 데이터 묶음

언리얼 오브젝트

  • 다수의 언리얼 오브젝트를 포장하는데 사용ㅎ는 언리얼 오브젝트
    • 모든 언리얼 오브젝트는 패키지 소속
  • 애셋: 언리얼 오브젝트 패키지의 서브 오브젝트
    • 에디터에는 에셋들이 노출됨
  • 구조상 패키지는 다수 언리얼 오브젝트 소유 가능, 일반적으로 하나의 애셋만 가짐
  • 애셋은 다수 서브 오브젝트 가질수 있음, 모두 언리얼 오브젝트 패키지에 포함
    • but, 에디터 노출 X

트랜지언트 패키지: 임시 패키지

0개의 댓글