유니티 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)

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

더 공부할 자료 - 개발 능력 다양화를 위한 학습의 필요성

유니티 엔진의 대안으로서, 인디 개발자들에게 선풍적인 인기를 끌고 있는 엔진이 바로 고도 엔진입니다. 혹시 고도 엔진을 배워 보려고 하신다면, 다음의 온라인 강의를 체크해 보시기 바랍니다.

초보자를 위한 고도엔진 게임 개발 입문