Deff_Dev
[Unity] JSON과 직렬화 본문
1. 아래와 같이 코드를 작성하고 오브젝트에 작성한 스크립트 컴포넌트를 추가했습니다.
public class SomeClass : MonoBehaviour
{
[SerializeField] private int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 선언된 [SerializeField]를 제거했습니다.
private int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
2가 출력된다.
- SerializeField는 직렬화되지 않은 해당 private 변수를 직렬화하여 인스펙터 창에 표시하여 값을 확인하거나 바꿀 수 있도록 한다.
- 이때, SerializeField를 지운다면 해당 변수는 직렬화되지 않으며, 인스펙터에 수정한 값은 무시되고 기존에 정의된 기본 2가 출력된다.
- 하지만 다시 SerializeField를 붙힌다면 3이 출력된다.
2. 이번에는 아래와 같이 코드를 작성하고 오브젝트에 작성한 스크립트 컴포넌트를 추가했습니다.
public class SomeClass : MonoBehaviour
{
public int intValue = 2;
private void Start()
{
Debug.Log(intValue);
}
}
인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 [HideInInspector]를 추가했습니다.
[HideInInspector] public int intValue = 2;
이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요?
3이 출력된다.
- HideInInspector 속성은 변수의 값을 인스펙터에서 숨기지만, 변수는 여전히 직렬화된다.
- 따라서 인스펙터에서 설정된 값 3은 유지되고, Start 메서드에서 이 값이 출력된다.
3. 1번과 2번의 결과가 다른 이유가 무엇인가요?
- 기본적으로 private은 직렬화가 안되어서 인스펙터 창에 보이지 않지만, SerializeField를 사용하여 직렬화하여 인스펙터 창에 보이게 하기 때문에 SerializeField가 사라진다면 직렬화도 사라져 값이 초기화된다.
- public은 기본적으로 직렬화가 되어져 있기 때문에 HideInInspector 를 붙히더라도 수정된 값은 초기화되지 않는다.
4. CSV/JSON 등 데이터 저장 포맷에 대해 설명하고, 활용에 적절한 상황을 설명해주세요
- CSV
- 저장된 모든 데이터를 , 로 구분하여 저장한다.
- 모든 데이터가 , 로 구분되어져 있다보니, 데이터를 확인하기 어렵고, 리스트와 딕셔너리 같이 복잡한 데이터 구조는 저장하고 불러오기가 까다롭다.
- 간단한 데이터 포맷으로 처리 속도가 JSON보다 빠르다.
- 주로 간단한 테이블 데이터를 처리하거나, 빠른 읽기/쓰기 성능이 필요할 때, 사용한다.
- JSON
- Key, Value 형식으로 되어져 있는 데이터 저장 포맷으로 리스트, 딕셔너리와 같이 복잡한 데이터 형태도 쉽게 저장하고 불러올 수 있다.
- Key, Value 형식으로 되어져 있다 보니 데이터를 확인하기 편하다.
- 웹, 애플리케이션, 네트워크 등 호환성이 뛰어나다.
- 데이터를 저장하는 과정이 CSV보다 느립니다.
- 키-값 쌍 구조로 인해 저장 공간이 더 많이 필요할 수 있습니다.
5. 특정 데이터를 JSON으로 활용하기 위해 해야하는 작업은 무엇인가요?
- 직렬화 : 객체를 JSON 형식의 문자열로 변환하는 과정
- 역직렬화 : JSON 문자열을 다시 객체로 변환하는 과정
- 파일입출력 : JSON 문자열을 파일에 저장하고, 파일에서 JSON 문자열을 읽어오는 작업
6. Unity에서 필드를 직렬화하려면 어떻게 해야하는지 설명해주세요.
- 기본 데이터 타입 직렬화:
- 필드를 public으로 선언하거나 private 필드에 [SerializeField] 속성을 붙다
- 클래스 직렬화
- 클래스를 직렬화하려면 클래스 정의에 [Serializable] 속성을 붙인다.
- 프로퍼티 직렬화
- C#의 자동 구현 속성을 직렬화하려면 [field: SerializeField] 속성을 붙인다.
'면접 질문 정리 > Unity' 카테고리의 다른 글
[Unity] 게임 수학 (0) | 2024.07.27 |
---|---|
[Unity] 최적화 (1) | 2024.07.17 |
[Unity] 코루틴 (1) | 2024.07.16 |
[Unity] MonoBehavior와 Unity 생명주기 (0) | 2024.07.15 |