json_serializable in Flutter

힐링코더·2023년 8월 30일
0

Flutter for a code monkey

목록 보기
7/14

1) 플러터의 json_serializable에 대해 알려 줘

json_serializable는 플러터에서 JSON 직렬화 및 역직렬화를 쉽게 처리하기 위한 코드 생성 도구입니다. 이 패키지를 사용하면 Dart 클래스를 정의하고, 해당 클래스를 JSON 형식으로 직렬화하거나 JSON 데이터를 Dart 객체로 역직렬화할 수 있습니다.

json_serializable를 사용하면 다음과 같은 장점을 얻을 수 있습니다:

간편한 직렬화와 역직렬화: JSON 데이터와 Dart 객체 간의 변환을 간편하게 처리할 수 있습니다.
데이터 모델 관리: 데이터 모델 클래스를 사용하여 데이터를 구조화하고 관리할 수 있습니다.
코드 생성: json_serializable가 코드를 생성해주기 때문에 반복적이고 지루한 코드 작성을 줄일 수 있습니다.
json_serializable를 사용하기 위해서는 몇 가지 단계를 따라야 합니다:

Dart 클래스 정의: JSON 데이터와 매핑될 Dart 클래스를 정의합니다.
주석 추가: 클래스와 필드에 주석을 추가하여 json_serializable가 어떤 방식으로 코드를 생성해야 하는지 지시합니다.
코드 생성: json_serializable 명령어를 실행하여 코드를 생성합니다.
예를 들어, 다음과 같이 사용할 수 있습니다:

Dart 클래스 정의:

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart'; // 생성될 코드의 파일 경로

@JsonSerializable()
class User {
  final String name;
  final String email;

  User({required this.name, required this.email});

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

주석 추가 및 코드 생성: user.g.dart 파일은 json_serializable 패키지가 자동으로 생성해줍니다. flutter pub run build_runner build 명령어를 실행하여 코드를 생성합니다.
이렇게 하면 User 클래스를 JSON 직렬화 및 역직렬화할 수 있게 됩니다. fromJson 및 toJson 메서드가 json_serializable에 의해 자동으로 생성되며, 이를 사용하여 JSON 데이터와 Dart 객체를 변환할 수 있습니다.

2) 여기까지만 하면 IDE에서 generate~ 버튼 눌러서 model 객체를 fromJson, toJson하는 걸 안 해도 되는 거야?

네, 맞습니다. json_serializable 패키지를 사용하면 IDE에서 직접 fromJson 및 toJson 메서드를 작성하지 않아도 됩니다. 주석과 코드 생성 명령을 통해 이러한 변환 메서드가 자동으로 생성되기 때문입니다.

간단한 주석과 몇 가지 설정을 추가하고, 명령을 실행하면 json_serializable가 필요한 변환 코드를 생성해줄 것입니다. 이로써 데이터 모델의 JSON 직렬화 및 역직렬화를 간편하게 처리할 수 있습니다.

3) json_serializable의 용도가 단순히 이게 끝이야? 간편한 것만 생각하면, IDE에서 generate~ 버튼 눌러서 그냥 생성하는 것도 매우 편한데?

json_serializable은 간단한 JSON 직렬화 및 역직렬화를 처리하기 위한 강력한 도구입니다. 단순히 IDE에서 코드 생성을 통해 메서드를 작성하는 것과는 다른 몇 가지 장점이 있습니다:

유지 보수성: 클래스의 구조가 변경되더라도 주석과 코드 생성 명령을 통해 json_serializable가 자동으로 업데이트된 코드를 생성해주므로 유지 보수가 용이합니다.

복잡한 변환: 데이터 모델이 복잡한 경우, 직렬화 및 역직렬화 로직이 복잡해질 수 있습니다. json_serializable를 사용하면 이러한 복잡한 변환 로직을 자동으로 생성하여 실수를 방지하고 작업을 간소화할 수 있습니다.

반복 작업 감소: 여러 클래스가 필요한 경우 모든 클래스에 대해 직접 fromJson 및 toJson 메서드를 작성하는 것은 반복적이고 번거로운 작업일 수 있습니다. json_serializable를 사용하면 이러한 반복 작업을 감소시킬 수 있습니다.

강력한 설정: json_serializable는 여러 옵션과 설정을 제공하여 원하는 방식으로 코드를 생성하고 커스터마이징할 수 있습니다.

코드 일관성: json_serializable를 사용하면 동일한 스타일과 규칙을 따르는 코드를 자동으로 생성할 수 있으므로 코드 일관성을 유지할 수 있습니다.

결국, json_serializable은 단순한 코드 생성 도구를 넘어서 데이터 모델의 변환을 더 효율적으로 관리하고 유지 보수하기 위한 강력한 기능을 제공합니다.

4) 이 패키지를 사용하는 목적은 이 정도가 다야? 내가 더 알아야 할 건 없어?

json_serializable 패키지의 주요 목적은 JSON 데이터와 Dart 객체 간의 변환을 편리하게 처리하는 것입니다. 하지만 추가적으로 몇 가지 알아두면 유용한 내용이 있을 수 있습니다:

Field Key Customization: 기본적으로 json_serializable는 Dart 클래스의 필드 이름을 그대로 사용하여 JSON 키와 매핑합니다. 필드 이름과 JSON 키가 다른 경우 @JsonKey 주석을 사용하여 매핑을 지정할 수 있습니다.

Type Casting: JSON 데이터와 Dart 클래스 간의 타입이 일치하지 않을 경우 fromJson 메서드에서 타입 변환 로직을 추가해야 할 수 있습니다. 이때 @JsonKey의 fromJson 및 toJson 속성을 사용하여 타입 변환 로직을 지정할 수 있습니다.

커스텀 로직 추가: fromJson 및 toJson 메서드 내에 필드 값을 변환하거나 추가적인 로직을 적용해야 하는 경우가 있을 수 있습니다. 이때 해당 메서드를 수동으로 수정하여 커스텀 로직을 추가할 수 있습니다.

네스팅 및 리스트: 중첩된 객체나 리스트를 처리할 때 json_serializable는 자동으로 중첩된 객체 및 리스트의 직렬화 및 역직렬화 코드를 생성합니다.

Nullable Fields: 필드가 null이 될 수 있는 경우 @JsonKey의 nullable 속성을 사용하여 해당 필드를 처리할 수 있습니다.

Enum 변환: enum 타입의 필드를 JSON 데이터로 변환하고 역직렬화할 때도 @JsonKey의 fromJson 및 toJson 속성을 활용할 수 있습니다.

더 복잡한 데이터 모델이나 특별한 상황에서는 위의 내용을 참고하여 json_serializable를 더 효과적으로 사용할 수 있습니다. 기본적으로 json_serializable는 간단한 데이터 변환에 효과적이지만, 고급 기능도 활용하여 더 복잡한 데이터 변환을 다룰 수 있습니다.

profile
여기는 일상 블로그, 기술 블로그는 https://yourhealingcoder.tistory.com/

0개의 댓글