직렬화(Serialization)
- Object나 연결된 Object의 묶음(Object 그래프)을 바이트 스트림으로 변환하는 과정
복잡한 데이터를 일렬로 세우기 때문에 직렬화라고 한다. - Serialization: Object 그래프에서 바이트 스트림
Deserialization: 바이트 스트림에서 Object 그래프
직렬화 장점
- 프로그램 상태를 저장하고 복원 가능 (게임 저장)
- 객체의 정보를 클립보드에 복사해 다른 프로그램에 전송 가능
- 네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원 가능 (멀티플레이어 게임)
- 데이터 압축, 암호화를 통해 데이터를 효율적이고 안전하게 보관 가능
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 데이터 유형
- Object : {}
오브젝트 내 데이터는 키, 벨류 조합으로 구성된다. ex) {"key" : 10} - Array : []
배열 내 데이터는 벨류로만 구성. ex)["value1", " value2", " value3"] - 이외 데이터
문자열("string"), 숫자(10 or 3.14), bool(true, false), null
Unreal Smart Pointer
- TUniquePtr(유니크포인터) : 지정한 곳에서만 메모리를 관리하는 포인터
특정 오브젝트에게 명확하게 포인터 해지 권한을 주고 싶은 경우
delete구문 없이 함수 실행 후 자동으로 소멸 - TSharePtr(공유 포인터) : 더 이상 사용되지 않으면 자동으로 메모리 해지하는 포인터
여러 로직에서 할당된 오브젝트가 공유해서 사용되는 경우
다른 함수로부터 할당된 오브젝트를 Out으로 받는 경우
Null일 가능성이 있다. - 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 |