JSON 학습 내용 정리

공재원
∙∙조회 6

JSON 학습 내용 정리

1. JSON 포맷

  • JSON이 데이터를 저장하고 교환하기 위한 텍스트 포맷이라는 것을 이해해야 한다.
  • JSON의 객체, 배열, 키, 값의 구조를 이해해야 한다.
  • 중괄호와 대괄호의 차이를 구분해야 한다.
  • JSON에서 문자열, 숫자, 불리언, null, 객체, 배열을 구분할 수 있어야 한다.
  • JSON의 키와 값이 구성되는 규칙을 이해해야 한다.
  • JSON이 중첩 구조를 표현하는 방법을 이해해야 한다.
  • JSON의 장단점을 이해해야 한다.
  • CSV와 JSON의 구조 및 사용 목적을 구분해야 한다.
  • 데이터 테이블에는 CSV를, 세이브 및 설정 데이터에는 JSON을 활용할 수 있어야 한다.

2. Unity JsonUtility

  • JsonUtility가 Unity에 내장된 JSON 직렬화 유틸리티라는 것을 이해해야 한다.
  • Unity의 직렬화 시스템과 JsonUtility의 관계를 이해해야 한다.
  • JsonUtility의 기본적인 사용 방법을 알아야 한다.
  • ToJson()을 사용해 객체를 JSON 문자열로 변환할 수 있어야 한다.
  • FromJson<T>()를 사용해 JSON 문자열을 새로운 객체로 변환할 수 있어야 한다.
  • FromJsonOverwrite()를 사용해 기존 객체의 데이터를 덮어쓸 수 있어야 한다.
  • [Serializable]의 역할과 사용 목적을 이해해야 한다.
  • public 필드와 [SerializeField] private 필드의 직렬화 규칙을 이해해야 한다.
  • 프로퍼티는 JsonUtility에서 직렬화되지 않는다는 점을 알아야 한다.
  • 중첩 클래스에도 직렬화 조건이 필요하다는 것을 이해해야 한다.

3. JsonUtility 직렬화 지원 범위

  • JsonUtility에서 지원하는 기본 자료형을 알아야 한다.
  • Vector2, Vector3, Vector4, Quaternion, Color 등의 Unity 자료형을 직렬화할 수 있어야 한다.
  • 직렬화 가능한 중첩 클래스와 구조체를 사용할 수 있어야 한다.
  • List와 배열을 직렬화할 수 있어야 한다.
  • Dictionary가 JsonUtility에서 지원되지 않는다는 점을 알아야 한다.
  • 최상위 배열과 리스트를 직접 직렬화할 수 없다는 점을 알아야 한다.
  • 최상위 배열과 리스트를 직렬화하기 위해 래퍼 클래스를 사용할 수 있어야 한다.
  • 부모 타입과 자식 타입 사이의 다형성 직렬화에 한계가 있다는 점을 이해해야 한다.
  • null 객체 필드가 원래 상태 그대로 보존되지 않는다는 점을 알아야 한다.
  • 커스텀 컨버터를 지원하지 않는다는 점을 알아야 한다.
  • DateTime, Nullable, 튜플 등의 지원에 한계가 있다는 점을 알아야 한다.

4. JsonUtility와 Newtonsoft.Json 비교

  • JsonUtility와 Newtonsoft.Json의 차이를 이해해야 한다.
  • 두 라이브러리의 설치 및 사용 방법을 구분해야 한다.
  • 직렬화 속도와 GC 부담의 차이를 이해해야 한다.
  • 프로퍼티와 Dictionary 지원 여부를 구분해야 한다.
  • 최상위 배열과 리스트의 처리 방식을 구분해야 한다.
  • 다형성 및 상속 데이터의 처리 방식을 구분해야 한다.
  • 커스텀 컨버터 지원 여부를 구분해야 한다.
  • 어트리뷰트를 이용한 직렬화 제어 방식을 비교해야 한다.
  • 각 라이브러리의 장단점을 고려해 적절한 라이브러리를 선택할 수 있어야 한다.

5. Newtonsoft.Json 기본 사용법

  • Newtonsoft.Json이 제공하는 JSON 라이브러리라는 것을 이해해야 한다.
  • Unity에서 Newtonsoft.Json 패키지를 추가하고 사용할 수 있어야 한다.
  • 직렬화와 역직렬화의 차이를 이해해야 한다.
  • SerializeObject()를 사용해 C# 객체를 JSON 문자열로 변환할 수 있어야 한다.
  • DeserializeObject<T>()를 사용해 JSON 문자열을 C# 객체로 변환할 수 있어야 한다.
  • 제네릭 타입에 변환할 대상 자료형을 지정할 수 있어야 한다.
  • JSON의 키 이름과 C# 필드 및 프로퍼티를 연결하는 방식을 이해해야 한다.
  • JSON 데이터와 C# 객체의 이름이 자동으로 매핑되는 규칙을 이해해야 한다.
  • 축자 문자열에서 큰따옴표를 표현하는 방법을 알아야 한다.

6. JSON 파일 저장 및 불러오기

  • 객체를 JSON 문자열로 변환한 후 파일에 저장할 수 있어야 한다.
  • 파일에 저장된 JSON 문자열을 읽어 객체로 복원할 수 있어야 한다.
  • Path.Combine()을 사용해 파일 경로를 구성할 수 있어야 한다.
  • Application.persistentDataPath를 이용해 저장 경로를 설정할 수 있어야 한다.
  • File.WriteAllText()와 File.ReadAllText()를 이용해 데이터를 저장하고 불러올 수 있어야 한다.
  • 직렬화, 파일 저장, 파일 읽기, 역직렬화의 흐름을 이해해야 한다.

7. JSON 출력 형식 설정

  • Formatting을 이용해 JSON 출력 형식을 설정할 수 있어야 한다.
  • Formatting.None과 Formatting.Indented의 차이를 이해해야 한다.
  • 들여쓰기와 줄바꿈을 적용해 JSON을 보기 좋게 출력할 수 있어야 한다.
  • 개발 중 디버깅과 배포 환경에 따라 출력 형식을 선택할 수 있어야 한다.

8. JsonSerializerSettings

  • JsonSerializerSettings가 직렬화와 역직렬화 동작을 제어하는 설정 객체라는 것을 이해해야 한다.
  • 설정 객체를 생성하고 필요한 옵션을 지정할 수 있어야 한다.
  • Formatting을 이용해 JSON 출력 형식을 설정할 수 있어야 한다.
  • TypeNameHandling을 이용해 타입 정보를 포함할 수 있어야 한다.
  • NullValueHandling을 이용해 null 값의 처리 방식을 설정할 수 있어야 한다.
  • 설정 객체를 직렬화 및 역직렬화 메서드에 전달할 수 있어야 한다.

9. TypeNameHandling

  • TypeNameHandling이 JSON에 C# 타입 정보를 포함하는 설정이라는 것을 이해해야 한다.
  • 상속 구조에서 부모 타입과 자식 타입의 관계를 이해해야 한다.
  • 다형성을 가진 객체를 역직렬화할 때 타입 정보가 필요한 이유를 알아야 한다.
  • $type이 JSON에 기록되는 방식을 이해해야 한다.
  • 부모 타입으로 역직렬화하더라도 실제 자식 타입으로 복원하는 과정을 이해해야 한다.
  • None, All, Auto의 차이를 구분해야 한다.
  • TypeNameHandling.All을 이용해 모든 타입 정보를 포함할 수 있어야 한다.

10. Newtonsoft.Json 어트리뷰트

  • 어트리뷰트를 이용해 직렬화 동작을 제어하는 방법을 알아야 한다.
  • [JsonProperty]를 이용해 JSON 키 이름을 지정할 수 있어야 한다.
  • [JsonIgnore]를 이용해 직렬화 및 역직렬화 대상에서 특정 필드를 제외할 수 있어야 한다.
  • [JsonConverter]를 이용해 특정 필드나 클래스에 커스텀 컨버터를 적용할 수 있어야 한다.
  • 각 어트리뷰트의 사용 목적과 적용 범위를 구분해야 한다.

11. JsonConverter를 이용한 커스텀 직렬화

  • 기본 직렬화 방식으로 원하는 데이터 구조를 만들기 어려운 경우를 이해해야 한다.
  • 커스텀 직렬화가 필요한 상황을 구분할 수 있어야 한다.
  • JsonConverter<T>를 상속해 사용자 정의 컨버터를 만들 수 있어야 한다.
  • ReadJson()을 이용해 JSON 데이터를 C# 객체로 변환할 수 있어야 한다.
  • WriteJson()을 이용해 C# 객체를 JSON 데이터로 변환할 수 있어야 한다.
  • 두 메서드의 역할과 실행 방향을 구분해야 한다.
  • JsonReader와 JsonWriter의 역할을 이해해야 한다.
  • 커스텀 컨버터에서 JSON 데이터를 읽고 기록하는 방법을 알아야 한다.

12. JsonWriter

  • JsonWriter가 JSON 데이터를 기록하는 역할을 한다는 것을 이해해야 한다.
  • 객체의 시작과 끝을 기록할 수 있어야 한다.
  • 배열의 시작과 끝을 기록할 수 있어야 한다.
  • 프로퍼티 이름과 값을 기록할 수 있어야 한다.
  • 주요 메서드의 역할을 구분해야 한다.
    • WriteStartObject()
    • WriteEndObject()
    • WriteStartArray()
    • WriteEndArray()
    • WritePropertyName()
    • WriteValue()

13. JObject

  • JObject가 JSON 객체를 다루기 위한 클래스라는 것을 이해해야 한다.
  • JObject를 이용해 JSON 데이터를 파싱할 수 있어야 한다.
  • JObject.Load()를 이용해 JsonReader의 데이터를 읽을 수 있어야 한다.
  • JObject.Parse()를 이용해 JSON 문자열을 파싱할 수 있어야 한다.
  • 키 이름을 이용해 JSON 내부의 값에 접근할 수 있어야 한다.
  • JSON 값을 필요한 C# 자료형으로 변환할 수 있어야 한다.
  • JObject를 Dictionary처럼 키를 이용해 데이터에 접근하는 방식으로 활용할 수 있어야 한다.

14. 커스텀 컨버터 적용 방법

  • 커스텀 컨버터를 적용하는 세 가지 방법을 알아야 한다.
  • 메서드 인자로 컨버터를 전달해 특정 호출에만 적용할 수 있어야 한다.
  • [JsonConverter] 어트리뷰트를 이용해 특정 필드나 클래스에 적용할 수 있어야 한다.
  • JsonSerializerSettings.Converters에 컨버터를 등록할 수 있어야 한다.
  • 세 가지 방법의 적용 범위와 차이를 구분해야 한다.

15. 핵심 API 및 개념 정리

구분학습해야 할 내용
JSON객체, 배열, 키, 값, 데이터 타입
JsonUtilityToJson, FromJson, FromJsonOverwrite
직렬화 규칙Serializable, SerializeField, 필드와 프로퍼티
Newtonsoft.JsonSerializeObject, DeserializeObject
출력 형식Formatting.None, Formatting.Indented
설정 객체JsonSerializerSettings
타입 정보TypeNameHandling, $type
null 처리NullValueHandling
어트리뷰트JsonProperty, JsonIgnore, JsonConverter
커스텀 컨버터JsonConverter, ReadJson, WriteJson
JSON 읽기 및 쓰기JsonReader, JsonWriter
JSON 파싱JObject.Load, JObject.Parse

16. 최종 학습 목표

  • JSON의 기본 구조와 데이터 타입을 이해해야 한다.
  • JsonUtility와 Newtonsoft.Json을 상황에 맞게 선택할 수 있어야 한다.
  • C# 객체를 JSON으로 변환하고 다시 객체로 복원할 수 있어야 한다.
  • JSON 데이터를 파일로 저장하고 불러올 수 있어야 한다.
  • 직렬화 설정과 어트리뷰트를 이용해 데이터 저장 방식을 제어할 수 있어야 한다.
  • 상속 구조를 가진 데이터를 JSON으로 저장하고 복원할 수 있어야 한다.
  • JsonConverter를 직접 구현해 원하는 데이터 형식으로 직렬화할 수 있어야 한다.
  • JObject를 이용해 JSON 내부의 데이터를 직접 읽고 처리할 수 있어야 한다.