[TIL] Unity - JSON 과 직렬화

MINO·2024년 7월 22일
post-thumbnail

2024-07-22


1-1 [SerializeField]

public class SomeClass : MonoBehaviour
{
    [SerializeField] private int intValue = 2;
    // private int intValue = 2; 로 변경
    
    private void Start()
	{
		Debug.Log(intValue);
	}
}

Q. 인스펙터에서 intValue의 값을 3으로 변경하고,
intValue 앞에 선언된 [SerializeField]를 제거했을 때,
Debug.Log(intValue)' 의 출력 결과는 어떻게 될까요?


A. SerializeField 를 제거하면, 인스펙터에 intValue 가 노출되지 않고,
인스펙터에서 값을 3으로 변경했더라도,
[SerializeField] 가 없으므로 저장되지 않고,
런타임 중에는 기본 값인 2로 설정된다.
따라서, 2가 출력된다.


1-2 [HideInInspector]

public class SomeClass : MonoBehaviour
{
    public int intValue = 2;
    // [HideInInspector] public int intValue = 2; 로 변경
    
    private void Start()
	{
		Debug.Log(intValue);
	}
}

Q. 인스펙터에서 intValue의 값을 3으로 변경하고,
intValue 앞에 [HideInInspector]를 추가했을 때,
Debug.Log(intValue);의 출력 결과는 어떻게 될까요?


A. intValue 는 public 으로 선언되어 있지만, 인스펙터에서는 숨겨진다.
이미 인스펙터에서 값을 3으로 변경한 상태라면, Unity 는 이 값을 저장한 상태이다.
따라서, 3이 출력된다.


1-3 이유는?

SerializeField 와 public 접근 제어자, 그리고 Unity 의 직렬화 방식 때문이다.

  1. private 으로 선언되어 있고, [SerializeField] 를 사용하여 인스펙터에 노출되고,
    [SerializeField]를 제거하여, 기본값인 2로 초기화된다.

  2. public 으로 선언되어 있고, [HideInInspector] 특성을 사용하여 인스펙터에서 숨겨진다.
    public 필드가 직렬화되어 인스펙터에 값이 저장되어, 3으로 저장된다.


2-1 CSV / JSON 데이터 저장 포맷

Q. CSV/JSON 등 데이터 저장 포맷에 대해 설명하고, 활용에 적절한 상황은?


A.
CSV (Comma-Separated Values)

  • 각 데이터 항목을 쉼표로 구분하여 저장하는 텍스트 파일의 형식
  • 게임 내 레벨 데이터나 통계 정보를 저장할 때 유용하다.

JSON (JavaScript Object Notation)

  • 데이터 구조를 객체 형태로 표현하는 텍스트 기반의 포맷 형식
  • 복잡한 데이터 구조를 저장할 때 적합하다.

2-2 데이터 -> JSON

Q. 특정 데이터를 JSON으로 활용하기 위해 해야하는 작업은 무엇인가 ?


A.
특정 데이터를 JSON 으로 활용하기 위해서
1. 데이터 구조를 설계, 정의한다.
2. 객체 생성 : 데이터를 표현할 클래스르 정의하고, 해당 클래스의 인스턴스를 생성한다.
3. 직렬화 : 정의한 객체를 JSON 문자열로 변환한다.
4. 저장 및 로드 : JSON 문자열을 파일에 저장 (직렬화) 하거나, JSON 문자열을 객체로 역직렬화한다.


2-3 필드 직렬화

Q.Unity에서 필드를 직렬화하려면 어떻게 해야하는지 설명해주세요


A.

1. [SerializeField] 특성

  • private 필드라도 인스펙터에 노출하고 싶다면 [SerializeField] 특성을 추가한다.

2. public 접근 제어자

  • 필드를 public 으로 선언하면 자동으로 직렬화되어 인스펙터에 노출된다.

TIL 마무리

그동안 [SerializeField] 는 사용해봤지만
[HideInInspector] 는 처음 본 키워드라 생소했다.

또한, CSV 파일을 통한 데이터 저장 포맷은 아직 적용해본 적이 없어,
대사나 레벨 데이터 등을 저장하고 불러올 때 사용해보면 좋을 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글