유니티/개념 정리

직렬화(Serialize)

fore4022 2024. 7. 24. 01:04

직렬화란?

  • 에디터에서 클래스나 오브젝트를 컴퓨터 환경에 저장하거나, 나중에 재구성하기 위해서 변환하는 과정이다.
  • 클래스, 오브젝트를 연속된 바이트 형태로 변환한다. 연속된 바이트 형태는 저장이나, 전달에 편리하다. 반대로, 연속된 바이트 형태를 클래스, 오브젝트로 변환하는 과정을 역직렬화(Deserialization)라고 한다.

핫 리로드란?

  • 에디터가 실행 중에 스크립트의 변경을 감지했을 때, 변경을 에디터에 적용하기 위해 재시작 할 필요 없이, 즉시 적용 시켜주는 것을 말한다.
  • 에디터는 스크립트가 변경될 때, 모든 스크립트의 직렬화 가능한 변수들을 임시로 저장한 이후, 에디터에 변경된 스크립트를 적용 시킨 후, 임시로 저장한 놓은 변수의 정보를 스크립트에 넣어준다.

직렬화 규칙

  • 직렬화 규칙은, 직렬화 되는 대상이 만족하는 조건이라고 보아도 된다.

    필드 직렬화 조건
    • public 또는 serializefield 속성을 가진다.
    • static이 아니어야 한다.
    • const가 아니어야 한다.
    • readonly가 아니어야 한다.
    • 직렬화 가능한 field type이 있어야 한다(직렬화 가능한 type이어야 한다.)
    직렬화 가능한 단순 필드 타입
    • serializefield 속성을 가지는 비추상, 비일반 클래스(generic을 사용하지 않는 클래스).
    • serializable 속성이 있는 커스텀 구조체.
    • UnityEngine.Object를 가지는 모든 레퍼런스 타입.
    • 기본 데이터 타입(int, float, bool, string 등…)
    • 열거형 타입
    • 특정 Unity의 내장 타입 Vector2, Quaternion, Color, LayerMask 등
    직렬화 가능한 컨테이너 필드 타입
    • 직렬화할 수 있는 단순 필드 타입의 배열 또는 List<T>이다.
    커스텀 클래스의 직렬화
    • serializable 속성이 있어햐 한다.
    • 추상적, 정적이 아니어야 한다.
    • 제네릭이 아닌 클래스, 상속 받을 수 있다.