직렬화(Serialize)와 역직렬화 그리고 유니티

sobokii·2022년 7월 8일
0

유니티

목록 보기
1/7

0. 문제 상황 인식

프로젝트 진행 중, 데이터 로드 작업을 처리하기 위해 유니티에서 지원하는 JsonUtility를 사용하기로 함.
참고 자료를 찾아보던 중 Serializable을 쓰는데 이에 대한 이론적 배경이 없음을 인식하고 학습 시작.

1. 해결 과정

구글 검색과 유튜브를 통한 지식 탐색.
레트로 직렬화, 역직렬화 강의
레트로 JsonUtility 사용 강의
유니티 도큐먼트 Json 직렬화

2. 습득한 지식

2-1. Serializable은 왜 쓰는가?

내가 직접 만드는 커스텀 클래스의 데이터들을 인스펙터 창에 노출시키기 위함.
유니티에서는 기본적으로 커스텀 클래스를 인스펙터 창에서 수정할 수 없다.
직렬화할 수 없기 때문에.
이를 인스펙터 창에서 사용하기 위해서는 직렬화 할 수 있는 것으로 지정해야하고, 그 방법으로 [Serializable] 키워드를 선언해준다.

2-2. 직렬화와 역직렬화는 무엇인가?

직렬화는 '오브젝트'를 연속된(serial) 데이터로 바꾸는 것.
'오브젝트'는 메모리에 존재하는 추상적인 것인데 비해, string 혹은 byte 데이터는 드라이브에 저장 가능하고, 통신선을 통해서도 전송 가능하다.
반대로 연속된 데이터에서 '오브젝트'를 생성하는 것은 역직렬화.

예를 들어, 유니티에서 사용하던 메모리의 모든 오브젝트는 유니티 프로그램 종료와 함께 소멸되어야 하는데 실제로는 다시 열어도 작업 내용이 남아있다.
이는 그 오브젝트에 직렬화 가능하다는 표시가 있고, 유니티가 작업 내용을 직렬화해서 컴퓨터 드라이브에 저장해두었기 때문에 가능한 것이다. 유니티를 재실행하면 유니티가 그 데이터를 역직렬화해서 작업 내용을 불러오는 것이다.

2-3. 그렇다면 SerializeField는 무엇인가?

접근제한자 private로 선언된 변수를 인스펙터 창에 띄우기 위해 쓰는 키워드
private의 장점과 인스펙터 창에서 다루는 편리함을 둘 다 취하는 방식이라 좋을 것 같은데, 유니티는 특별한 경우가 아니라면 public을 추천한다고 한다.
프로그램 성능에 영향을 끼치기 때문인 듯 하다. 스크립트 직렬화(SerialzeField)에 대한 도큐먼트 링크

3. 결론 및 추가 과제

1. 인간이 볼 수 있는 형태의 것 -> 컴퓨터가 원하는 값으로 변환하는 것이 직렬화, 그 역의 경우가 역직렬화.
2. 유니티 엔진에서는 기본적인 컴포넌트들은 기본적으로 직렬화가 가능하다.
3. 그래서 커스텀 클래스의 경우 직렬화 가능하게 하기 위해서는 System.Serializable을 선언해주어야 한다.
4. SerializeField는 
5. 유니티는 JsonUtility를 통해 직렬화, 역직렬화를 지원하고 있다.
6. 엔진은 편리하다! 마음껏 사용해서 만들어보자!

기획자와 협업하기 위한 데이터 관리 툴에 무엇이 있는지 확인해보자!
JsonUtility에 대해서도 깊게 알아보자!

profile
직장 구하고 있습니다.

0개의 댓글