반응형

네! Flutter/Dart에서 간단하게 Model Class를 생성하고 JSON 직렬화/역직렬화 코드를 자동으로 작성해주는 유명한 패키지로 json_serializablefreezed가 있습니다. 이 두 패키지를 사용하면 모델 클래스를 훨씬 간단하고 효율적으로 생성할 수 있습니다.


1. json_serializable 패키지

json_serializable는 JSON 변환 로직을 자동 생성해주는 패키지입니다.

설치

pubspec.yaml에 아래를 추가:

dependencies:
  json_annotation: ^latest_version

dev_dependencies:
  build_runner: ^latest_version
  json_serializable: ^latest_version

사용법

  1. 모델 클래스 작성
    import 'package:json_annotation/json_annotation.dart';
    

part 'user.g.dart'; // 파일명과 동일하게 작성해야 합니다.

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

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

// JSON 변환 함수들은 자동 생성됩니다.
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}


2. **코드 생성**
터미널에서 아래 명령 실행:
```bash
flutter pub run build_runner build

이후 user.g.dart 파일이 생성되고, JSON 변환 관련 코드가 자동으로 작성됩니다.


2. freezed 패키지

freezed는 불변 데이터 클래스와 JSON 변환, copyWith 메서드 등을 자동 생성해주는 패키지입니다.

설치

pubspec.yaml에 아래를 추가:

dependencies:
  freezed_annotation: ^latest_version

dev_dependencies:
  build_runner: ^latest_version
  freezed: ^latest_version

사용법

  1. 모델 클래스 작성
    import 'package:freezed_annotation/freezed_annotation.dart';
    

part 'user.freezed.dart';
part 'user.g.dart';

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

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


2. **코드 생성**
터미널에서 아래 명령 실행:
```bash
flutter pub run build_runner build

이후 user.freezed.dartuser.g.dart 파일이 생성됩니다.

freezed의 장점:

  • 불변성을 지원합니다.
  • copyWith 메서드가 자동 생성됩니다.
  • 보다 더 강력한 데이터 클래스 생성이 가능합니다.

결론

  • 간단하고 직렬화만 필요한 경우: json_serializable
  • 불변성과 추가 기능이 필요한 경우: freezed

둘 중 어떤 패키지가 적합한지 선택하면 좋습니다. 필요하면 추가적인 도움을 요청하세요! 😊

반응형

+ Recent posts