유니티 SerializeField 란?

유니티 SerializeField 는 스크립트에서 private 필드를 직렬화하기 위해 사용합니다.

직렬화는 개체의 상태를 나중에 저장, 전송 또는 재구성할 수 있는 형식으로 변환하는 프로세스입니다. 유니티에서 직렬화는 게임 상태를 저장 및 로드하거나 에디터와 런타임 간에 데이터를 전송하는 데 사용됩니다.

사실 유니티에서는 스크립트의 public 필드(예; public 변수)만 직렬화할 수 있습니다. 그러나 [SerializeField] 를 사용하면 private 필드도 직렬화할 수도 있습니다. 

예를 들어 다음과 같이 private 로 선언된 변수 myPrivateField 앞에 [SerializeField] 를 붙이면 이 변수를 직렬화할 수 있으며, 그 결과 유니티의 인스펙터에 해당 변수가 노출됩니다.

using UnityEngine;

public class Example : MonoBehaviour
{
    [SerializeField]
    private int myPrivateField;
}

[SerializeField] 를 사용하는 이유

그럼 Unity C#에서 [SerializeField] 를 사용하는 이유는 무엇일까요? 아마 다음의 3가지가 대표적인 이유일 것입니다.

private 필드의 직렬화를 원할 때

앞서 언급했듯이, 유니티에서는 기본적으로 스크립트의 public 필드만 직렬화할 수 있습니다. 하지만 [SerializeField] 를 사용하여 private 필드를 직렬화할 수도 있습니다. 즉, 다른 스크립트에서 해당 필드를 여전히 private 으로 감추면서도 직렬화를 통해 유니티 에디터의 인스펙터를 통한 값의 입력이 가능해지는 것입니다.

직렬화를 커스터마이징하고 싶을 때

[SerializeField] 를 사용하면 필드의 직렬화를 커스터마이징할 수 있습니다. 예를 들어 [Range] 애트리뷰트(attribute)를 사용하여 직렬화된 필드에 할당할 수 있는 값을 제한하거나 [Tooltip] 을 사용하여 인스펙터에서 필드를 선택할 때 설명을 제공할 수 있습니다.

코드를 더 쉽게 업데이트하기 위해

직렬화된 private 필드가 있고 필드의 이름이나 타입을 변경해야 하는 경우 직렬화된 데이터도 업데이트해야 합니다. 이 때, 직렬화된 데이터가 많은 경우 시간이 오래 걸릴 수 있습니다. 

하지만 [SerializeField] 를 이용함으로써 우리는 직렬화된 데이터가 변경된 필드를 따라가도록 할 수 있습니다. 따라서 코드를 업데이트할 때 시간을 절약할 수 있습니다.

더 공부할 자료

유니티 C# 스크립트 작성에 대해 보다 심도 있는 공부를 원하시면 다음 링크를 체크해 보시기 바랍니다.

유니티 C# 프로그래밍 연습 (ebook)

“막 유니티를 배운 주니어 게임 프로그래머로서 자신의 힘으로 첫번 째 게임을 만들고 싶지만 어디서부터 시작해야 할지 막막한 분 계신가요? 이 책을 읽어 보세요. 간단한 게임이지만 게임 구현 전체 프로세스를 자세한 설명과 함께 제공합니다. 동영상 예제까지 들어 있어요!”

추천 학습 자료