본문 바로가기
Unreal 게임 개발/Unreal 강의 개인 정리

Unreal 직렬화

by daisy0461 2024. 1. 8.

직렬화(Serialization)

  • Object나 연결된 Object의 묶음(Object 그래프)을 바이트 스트림으로 변환하는 과정
    복잡한 데이터를 일렬로 세우기 때문에 직렬화라고 한다.
  • Serialization: Object 그래프에서 바이트 스트림
    Deserialization: 바이트 스트림에서 Object 그래프

 

직렬화 장점

  1. 프로그램 상태를 저장하고 복원 가능 (게임 저장)
  2. 객체의 정보를 클립보드에 복사해 다른 프로그램에 전송 가능
  3. 네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원 가능 (멀티플레이어 게임)
  4. 데이터 압축, 암호화를 통해 데이터를 효율적이고 안전하게 보관 가능

 Unreal에서 제공하는 직렬화 시스템

  • 직렬화 시스템을 위해 제공하는 클래스 - FArhhive
    Shift(<<) operateor를 통해 전송해 원하는 형태로 바이트 스트림 저장
  • FArchive 클래스 종류
    메모리 아카이브(FMemoryReader, FMemoryWriter): 메모리 Read & Write
    파일 아카이브(FArchiveFileReaderGeneric, FArchiveFileWirterGeneric): 파일 Read & Write
    기타 Unreal Object와 관련된 아카이브 클래스(FArchiveUObject)
  • Json 직렬화 기능도 별도 라이브러리를 통해 제공

Json (JavaScript Object Notation) 직렬화

  • 웹 환경에서 서버와 클라이언트 사이에 데이터를 주고받을 때 사용하는 텍스트 기반 데이터 포멧
  • 장점
    텍스트임에도 데이터 크기가 가볍다.
    읽기 편해서 데이터를 보고 이해가 가능하다.
    웹 통신의 표준으로 널리 사용된다
  • 단점
    지원하는 타입이 별로 없다.(문자, 숫자, bool, null, array, object만 사용 가능)
    텍스트 형식으로만 사용이 가능하다. (네트워크에서 극도의 효율을 추구하긴 어려움)
  • Unreal Engine의 Josn, JsonUtilities를 활용하면 편리하게 구현이 가능하다.
  • 해당 Json 라이브러리를 위해 Unreal Engine에서 제공하는 Smart Pointer를 알아두면 좋다.

 

Json 데이터 유형

  1. Object : {}
    오브젝트 내 데이터는 키, 벨류 조합으로 구성된다. ex) {"key" : 10}
  2. Array : []
    배열 내 데이터는 벨류로만 구성. ex)["value1", " value2", " value3"]
  3. 이외 데이터
    문자열("string"), 숫자(10 or 3.14), bool(true, false), null

Unreal Smart Pointer

  1. TUniquePtr(유니크포인터) : 지정한 곳에서만 메모리를 관리하는 포인터
    특정 오브젝트에게 명확하게 포인터 해지 권한을 주고 싶은 경우
    delete구문 없이 함수 실행 후 자동으로 소멸
  2. TSharePtr(공유 포인터) : 더 이상 사용되지 않으면 자동으로 메모리 해지하는 포인터
    여러 로직에서 할당된 오브젝트가 공유해서 사용되는 경우
    다른 함수로부터 할당된 오브젝트를 Out으로 받는 경우
    Null일 가능성이 있다.
  3. TShareRef(공유 레퍼런스) : 공유포인터와 동일하지만 유효한 객체를 항상 보장받는 레퍼런스
    여러 로직에서 할당된 오브젝트가 공유해서 사용되는 경우
    Not Null을 보장받으며 오브젝트를 편리하게 사용하고 싶은 경우

 

'Unreal 게임 개발 > Unreal 강의 개인 정리' 카테고리의 다른 글

Unreal Build System  (1) 2024.04.14
Unreal Package & Asset  (0) 2024.01.12
Unreal 메모리 관리 (GC)  (0) 2024.01.03
Unreal Struct & Map  (0) 2024.01.03
Unreal Delegate  (0) 2023.12.29