JSON 학습 내용 정리
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 | 객체, 배열, 키, 값, 데이터 타입 |
| JsonUtility | ToJson, FromJson, FromJsonOverwrite |
| 직렬화 규칙 | Serializable, SerializeField, 필드와 프로퍼티 |
| Newtonsoft.Json | SerializeObject, 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 내부의 데이터를 직접 읽고 처리할 수 있어야 한다.



