Unity Json 기능 비교와 파일 저장

이준영·2025년 11월 14일

JsonUtility vs Newtonsoft Json

JsonUtility

  • 유니티에 내장된 기본 JSON 유틸리티

장점

  1. 성능(속도): 직렬화/역직렬화 속도가 Newtonsoft.Json에 비해 훨씬 빠름. (모바일 환경에서 4~6배)

  2. Unity 내장: 별도의 패키지 설치나 외부 파일(DLL) 추가가 필요 없음.

  3. Unity 타입 지원: Vector3, Quaternion, Color 등 유니티에서 사용하는 구조체들을 기본적으로 지원

  4. IL2CPP 지원: IL2CPP 빌드 환경에서 안정적으로 동작

단점

  1. 제한적인 기능:

    • Public Field만 지원: 프로퍼티(Property)나 비공개 필드(Private Field)는 직렬화/역직렬화할 수 없음.

    • 제한적인 타입: Dictionary<TKey, TValue>나 중첩된 배열은 기본적으로 지원하지 않음. (Wrapper 클래스 필요)

    • 상속 및 다형성 미지원: 베이스 클래스/인터페이스 객체의 파생 클래스 직렬화에 제한이 있음.

    • 커스텀 컨버터 불가: 복잡한 변환 규칙을 직접 정의할 수 없음.

  2. 최상위 객체 제한: JSON 문자열의 최상위가 객체({}) 형태여야 하며, 배열([]) 형태를 직접 직렬화/역직렬화하려면 Wrapper 클래스가 필요.

Newtonsoft.Json

  • 가장 널리 사용되는 강력한 외부 JSON 라이브러리이며, 유니티에서도 공식 패키지com.unity.nuget.newtonsoft-json로 제공

장점

  1. 강력한 기능 및 유연성:

    • 모든 필드/프로퍼티 지원: Public, Private 필드, 그리고 프로퍼티 모두 직렬화/역직렬화가 가능. (특정 어트리뷰트 사용)

    • 광범위한 타입 지원: Dictionary<TKey, TValue>, 다차원 배열, List 등을 Wrapper 클래스 없이 처리할 수 있음.

    • 다형성 지원: 상속 관계에 있는 클래스의 직렬화 및 역직렬화가 가능.

    • LINQ to JSON: JObject, JArray 등의 타입을 사용하여 JSON 데이터를 동적으로 생성, 수정, 탐색하는 등 데이터 가공이 쉽움.

    • 커스텀 컨버터 지원: 복잡한 변환 로직을 직접 구현할 수 있음.

  2. 업계 표준: .NET 생태계에서 사실상의 표준으로 널리 사용되어 관련 자료가 풍부.

  3. IL2CPP 지원: 유니티 공식 패키지로 제공되어 IL2CPP 빌드 환경에서 안정적으로 동작.

단점

  1. 상대적으로 느린 속도: JsonUtility에 비해 직렬화/역직렬화 성능이 상대적으로 느림.

  2. 외부 패키지: 유니티에 내장되어 있지 않으므로 Package Manager를 통해 설치 필요.

  3. Unity 타입 문제: Vector3, Quaternion 등 유니티 구조체를 기본적으로 직렬화할 때 문제가 발생할 수 있음. (순환 참조 또는 불필요한 데이터 포함 등)

요약

특징JsonUtilityNewtonsoft.Json (Json.NET)
속도(성능)매우 빠름 (특히 모바일)상대적으로 느림
사용 편의성Unity 내장, 간단한 API패키지 설치 필요, 복잡한 API 가능
기능/유연성제한적 (Public Field, 기본 타입)매우 강력 (Property, Dictionary, 다형성 등)
Unity 타입기본 지원 (Vector3, Color 등)제한적, 별도 설정 필요
권장 사용처간단한 설정, 작은 데이터, 성능이 중요한 경우복잡한 데이터 구조, 세이브 시스템, 다양한 기능이 필요한 경우

Json 파일 저장

저장

저장
  • FileStream 클래스를 이용해서 Json 파일을 생성.
  • Json형식으로 변환한 문자열을 바이트 배열로 변환.
  • 파일에 바이트 배열 쓰기.
Test

불러오기

불러오기
  • FileStream 클래스를 이용해서 Json 파일을 열기.
  • 파일을 읽어서 바이트 배열에 저장.
  • 바이트 배열을 Json 문자열로 변환.
  • Json 문자열을 객체로 변환.
Test
profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글