본문 바로가기
Unity

Unity 에서 Serializable 사용 예

by Oz Driver 2025. 7. 3.

Unity에서 사용자 정의 클래스나 구조체를 인스펙터에 보여주고 싶을 때 반드시 알아야 할 키워드가 바로 [System.Serializable]입니다. 이 키워드는 Unity의 직렬화(Serialization) 시스템에 해당 타입을 등록하겠다는 선언입니다.

 

언제 필요할까?

Unity는 기본적으로 public 필드나 [SerializeField]가 붙은 필드만 인스펙터에 노출합니다. 그런데 그 필드가 클래스나 구조체일 경우, Unity는 내부 내용을 자동으로 보여주지 않습니다. 이때 [System.Serializable]이 있어야 내부 값들도 인스펙터에서 펼쳐서 볼 수 있게 됩니다.

 

예제 코드

using System;

[Serializable]
public class DropInfo
{
    public float time;
    public Color color;
}

public class Dropper : MonoBehaviour
{
    [SerializeField]
    private List<DropInfo> dropList;
}

 

위 코드에서 [System.Serializable]이 없다면, dropList 자체는 인스펙터에 보일 수 있지만 내부에 들어 있는 DropInfo의 time, color 같은 속성은 보이지 않습니다.

하지만 [Serializable]을 붙이면, DropInfo 안에 있는 값들도 전부 인스펙터에 표시되고 편집할 수 있게 됩니다.

 

SerializeField 와의 차이점은?

둘 다 "인스펙터에 보여준다"는 목적은 같지만, 대상과 역할이 다릅니다. [Serializable]은 타입을 위한 선언, [SerializeField]는 변수(필드)를 위한 선언입니다.

 

마무리

직렬화는 Unity의 인스펙터 시스템과 매우 밀접한 기능입니다.

[System.Serializable]은 단순히 태그 하나 붙이는 것이지만, 복잡한 데이터를 한 덩어리로 인스펙터에 편하게 노출할 수 있게 해주는 중요한 도구입니다. 구조화된 데이터를 다룰 일이 많아질수록 필수적으로 익혀야 할 개념입니다.