하나의 개체는 다른 개체를 속성으로 들고 있을 수가 있음.
이런 관계를 오브젝트 그래프라고 함
오브젝트 그래프를 바이트 스트림으로 변환하는 과정.
복잡한 데이터를 일렬로 세우기 때문에 직렬화라고 부름.
Serialization: 오브젝트 그래프에서 바이트 스트림으로의 변환.
Deserialization: 바이트 스트림에서 오브젝트 그래프로의 변환.
현재 게임의 상태를 저장하고 다시 복원할 수 있음.
블루프린트 코드를 복사해서 다른 곳에서 붙혀넣기 가능.
캐릭터의 위치를 네트워크상으로 다른 컴퓨터에서 재현 가능.
직렬화 시스템을 위해서는 언리얼에서 제공하는 클래스 FArchive와 << 연산자를 활용함.
다양한 아카이브 클래스를 제공함.
메모리 아카이브(FMemoryReader, FMemoryWriter)
파일 아카이브(FArchiveFileReaderGeneric, FArchiveFileWriterGeneric)
언리얼 오브젝트와 관련된 아카이브(FArchiveUObject)
Json 직렬화 기능도 별도의 라이브러리로 제공.
USTRUCT를 데이터 저장/전송에 사용하는 경우가 많음.
제한적인 리플렉션 시스템(UPROPERTY()만 가능. UFUNCTION() 안됨)과 직렬화 기능 제공.
스택 메모리에 저장됨. 힙 메모리 할당 없기에 NewObject API를 사용할 수 없음.
웹 환경에서 서버와 클라 사이에 데이터를 주고 받을 때 사용하는 텍스트 기반 데이터 포맷.
장점: 텍스트 임에도 데이터 크기가 가벼움.
읽기 편해서 .json 파일을 열어서 그대로 이해할 수 있음.
사실상 웹 통신의 표준으로 사용됨.
단점: 지원하는 타입이 몇 개 안됨. 문자, 숫자, 불리언, 널, 배열, 오브젝트만 가능.
텍스트 형식으로만 사용할 수 있어서 극도의 효율 추구가 불가능.
오브젝트 {}
오브젝트 내 데이터는 키-벨류 조합으로 구성됨. ex. { ”Key” : 77 }
배열 []
배열 내 데이터는 벨류로만 구성됨. ex. [ “Value1”, “Value2”, “Value3” ]
이외 데이터
문자열(”String”), 숫자(7, 3.141592), 불리언(true, false), 널(null)로 구성됨.