꾸준히 하고싶은 개발자

freezed 와 json_serializable 차이 본문

카테고리 없음

freezed 와 json_serializable 차이

프라우스 2024. 5. 12. 20:45
  1. Freezed:

freezed는 코드 생성 패키지로, Dart에서 쉽게 불변 클래스를 생성할 수 있게 해줍니다. 필요한 코드를 자동으로 생성하여 불변 클래스를 위한 보일러플레이트 코드 작성을 줄여줍니다.

동등성(equality)과 해시코드(hashcode) 메서드를 생성하고, copyWith 메서드를 생성할 수 있으며, 필요하다면 toJson과 fromJson 메서드도 생성할 수 있습니다.

클래스에 @freezed와 @immutable를 주석으로 달아 불변 데이터 클래스를 생성합니다.

import 'package:freezed_annotation/freezed_annotation.dart';

part 'user.freezed.dart';

@freezed
abstract class User with _$User {
  const factory User({String name, int age}) = _User;
}



  1. json_serializable:

json_serializable은 또 다른 Dart의 코드 생성 패키지로, JSON 직렬화와 역직렬화를 위한 코드를 생성합니다.

클래스에 제공된 주석을 기반으로 toJson 및 fromJson 메서드를 생성합니다.

클래스에 @JsonSerializable()와 @JsonKey()를 주석으로 달아 직렬화와 역직렬화 과정을 사용자가 커스텀할 수 있습니다.

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  final String name;
  final int age;

  User({this.name, this.age});

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

  Map<String, dynamic> toJson() => _$UserToJson(this);
}



요약하자면, freezed는 copyWith와 같은 편리한 메서드가 있는 불변 데이터 클래스를 생성하는 데 중점을 두고 있으며, json_serializable은 Dart 클래스의 JSON 직렬화와 역직렬화 메서드를 생성하는 데 중점을 두고 있습니다. 그러나 두 패키지는 동일한 프로젝트에서 함께 사용하여 JSON 직렬화와 역직렬화가 가능한 동시에 불변 데이터 클래스를 생성할 수 있습니다.

 

 

Freezed:

freezed 패키지는 Dart에서 불변성을 가진(immutable) 데이터 클래스를 생성하는 데 도움을 주는 패키지입니다.

보통 데이터 모델이나 상태 관리를 위해 사용됩니다. 예를 들어, 사용자(User) 정보를 담고 있는 클래스를 만들 때 사용할 수 있습니다.

freezed를 사용하면, 클래스를 @freezed 어노테이션으로 주석 처리하고, 클래스 내 필드들을 포함하여 생성자를 정의합니다.

이후에 코드를 생성하면, freezed가 동등성 검사, 해시 코드 생성, 복사 생성자(copyWith) 등과 같은 유용한 메서드들을 자동으로 생성합니다.

이렇게 생성된 클래스는 수정할 수 없으며, 불변 객체로서의 안전성을 보장합니다.

json_serializable:

json_serializable 패키지는 Dart 클래스를 JSON 직렬화 및 역직렬화할 수 있도록 도와주는 패키지입니다.

주로 외부 API와 통신하거나, 파일 입출력을 할 때 사용됩니다.

클래스를 @JsonSerializable() 어노테이션으로 주석 처리하고, 필요한 경우 @JsonKey() 어노테이션을 사용하여 필드의 이름을 지정할 수 있습니다.

코드를 생성하면, json_serializable가 toJson 및 fromJson과 같은 메서드를 자동으로 생성합니다. 이러한 메서드를 사용하여 객체를 JSON 형식으로 직렬화하거나 JSON을 객체로 역직렬화할 수 있습니다.

사용 방법:

보통은 먼저 freezed를 사용하여 불변 데이터 클래스를 만든 후, 이 클래스를 json_serializable로 JSON 직렬화/역직렬화할 수 있습니다.

따라서 freezed를 사용하여 데이터 모델을 정의한 다음, 해당 모델을 json_serializable을 사용하여 JSON 형식으로 직렬화하거나 역직렬화합니다.

간단히 말해서, freezed 불변성 데이터 모델을 만드는 사용되고, json_serializable 해당 데이터 모델을 JSON 형식으로 직렬화하고 역직렬화하는 사용됩니다. 함께 사용하면 효율적으로 데이터를 다룰 있습니다.