[Unity] 직렬화된 값 유지하기 FormerlySerializedAs

식혜드식혜·2025년 4월 21일

Unity

목록 보기
1/6

FormerlySerializedAsAttribute

사용하려면 using UnityEngine.Serialization; 지시문을 추가해야 한다.

  • Unity에서는 필드 이름이 변경되면 기존에 저장된 직렬화 데이터와 매칭되지 않아, 해당 값이 초기화되는 문제가 발생할 수 있다.
    이때 FormerlySerializedAs 속성을 사용하면 이전 이름과의 연결을 유지하여 데이터를 잃지 않도록 해준다.

다음과 같은 클래스가 있다고 가정해보겠다.

using UnityEngine;

public class Enemy : MonoBehaviour
{
    public int hitpoints; // 체력
}

FormerlySerializedAs(oldName) 속성을 사용하면 직렬화된 값을 잃지 않고 필드의 이름을 바꿀 수 있다.

예를 들어, 아래와 같이 기존에 hitpoints라는 이름의 필드를 health로 변경하면서 FormerlySerializedAs("hitpoints")를 붙이면, 기존에 저장된 hitpoints 값이 health에 유지된다.

using UnityEngine;
using UnityEngine.Serialization;

public class Enemy : MonoBehaviour
{
    [FormerlySerializedAs("hitpoints")]
    public int health;
}

Unity의 직렬화 관련 참고사항

Unity는 기본적으로 public 필드를 직렬화하여 인스펙터에 표시하고 저장한다.
private 또는 protected 필드를 직렬화하려면 [SerializeField] 속성을 사용해야 한다.

FormerlySerializedAs의 장점 요약

  • 필드 이름 변경 시에도 기존에 저장된 데이터를 유지할 수 있다.
  • 리팩토링 시 유용하다. 코드의 가독성이나 의미를 개선하기 위해 변수명을 변경하더라도, 데이터를 잃지 않게 도와준다.
profile
안녕하세요! 유니티 공부 중인 고3 학생입니다

0개의 댓글