언리얼 오브젝트 관리 - 직렬화
Unreal 이론2024. 9. 12. 17:24
[이득우의 언리얼 프로그래밍 수업의 정리]
직렬화(Serializaion)란?
- 오브젝트나 연결된 오브젝트의 묶음(오브젝트 그래프)을 바이트 스트림으로 변환하는 과정.
- 복잡한 데이터를 일렬로 세우기 때문에 직렬화
- 거꾸로 복구시키는 과정도 포함
- 시리얼라이제이션: 오브젝트 그래프에서 바이트 스트림으로
- 디시리얼라이제이션: 바이트스트림에서 오브젝트 그래프로
- 장점
- 현재 프로그램의 상태를 저장하고 필요한 때 복원(게임의 저장)
- 현재 객체의 정보를 클립보드에 복사해서 다른 프로그램에 전송
- 네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원(멀티플레이어 게임)
- 데이터 압축, 암호화 통해 데이터를 효율적이고 안전하게 보관
직렬화 구현시 고려할 점
- 직접 구현할경우 다양한 상황 고려 필요
- 데이터 레이아웃: 오브젝트가 소유한 다양한 데이터를 변환할것인가?
- 이식성: 서로 다른 시스템에 전송해도 이식될 수 있는가? (예시: 운영체제마다 다른 빅엔디안, 리틀엔디안 차이)
- 버전 관리: 새로운 기능이 추가될 때 이를 어떻게 확장하고 처리할것인가?
- 성능: 네트웍 비용을 줄이기 위해 어떤 데이터 형식 사용?
- 보안: 데이터 어떻게 안전하게 보호?
- 에러 처리: 전송과정에서 문제 발생시 이를 어떻게 인식하고 처리할것인가?
- 이런 상황 모두 감안해 직렬화 모델 만드는것 쉽지않다.
언리얼 엔진의 직렬화 시스템
- UE엔진은 이런 상황을 모두 고려한 직렬화 시스템 자체 제공
- FArchive 클래스와 연산자 제공
- 아카이브 클래스 - FArchive
- shift(<<) operator
- 다양한 아카이브 클래스 제공
- 메모리 아카이브(FMemoryReader, FMemoryWriter)
- 파일 아카이브(FArchiveFileReaderGeneric, FArchiveFileWriterGeneric)
- 기타 언리얼 오브젝트와 관련된 아카이브 클래스(FArchiveUObject)
- Json 직렬화 기능: 별도 라이브러리 통해 제공
- 장점
- 텍스트지만 데이터 크기 가벼움
- 읽기 편해서 데이터 보고 이해 가능
- 사실상 웹 통신의 표준급으로 널리 사용됨
- 단점
- 지원하는 타입 몇개안됨
- 텍스트 형식으로만 사용 가능
- 언리얼 엔진의 Json -> JsonUtilities 라이브러리 활용
언리얼 스마트 포인터 라이브러리 개요
- 일반 C++ 오브젝트의 포인터 문제 해결해주는 언리얼 엔진의 라이브러리
- TUniquePtr(유니크 포인터)
- 지정한 곳에서만 메모리 관리하는 포인터
- 특정 오브젝트에게 명확하게 포인터 해지 권한 주고싶은 경우
- delete 구문 없이 함수 실행 후 자동으로 소멸시키고 싶을 때
- TSharedPtr(공유 포인터)
- 더 이상 사용되지 않으면 자동으로 메모리 해지하는 포인터
- 여러 로직에서 할당된 오브젝트가 공유해서 사용하는 경우
- 다른 함수로부터 할당된 오브젝트를 Out으로 받는 경우
- Null 일 수 있음
- TSharedRef(공유 레퍼런스)
- 공유포인터와 동일하지만 유효한 객체 항상 보장받는 레퍼런스
- 여러 로직에서 할당된 오브젝트가 공유해서 사용하는 경우
- Not Null 보장받으며 오브젝트 편리하게 사용하고 싶은 경우
'Unreal 이론' 카테고리의 다른 글
언리얼 빌드 시스템 (1) | 2024.10.03 |
---|---|
언리얼 오브젝트 관리 - 패키지 (0) | 2024.10.01 |
언리얼 엔진의 메모리 관리 (1) | 2024.09.05 |
언리얼 네트워킹 개요 (3) | 2024.09.02 |
언리얼 컨테이너 라이브러리 - 구조체, Map (0) | 2024.08.20 |
댓글()