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

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

더 공부할 자료

스크립터블 오브젝트를 능숙하게 사용하는 능력은 이제 유니티 게임 개발에 필수적으로 요구되고 있습니다.

특히 AI 코딩 시대가 되면서 데이터와 코드를 분리해서 작업하는 방식의 중요성이 더 커졌습니다. 코드를 더 작게, 기능별로 쪼개어 작성해야 관리가 편하기 때문입니다.

"유니티 6 스크립터블 오브젝트: 기초에서 활용까지"는 유니티 입문 단계를 끝내고 좀 더 심화된 지식을 익히고자 하는 프로그래머를 대상으로 쓰여진 책입니다. 책 내용은 다음 링크를 참고하시기 바랍니다.

책 내용 살펴 보기