네! Flutter/Dart에서 간단하게 Model Class를 생성하고 JSON 직렬화/역직렬화 코드를 자동으로 작성해주는 유명한 패키지로 json_serializable
와 freezed
가 있습니다. 이 두 패키지를 사용하면 모델 클래스를 훨씬 간단하고 효율적으로 생성할 수 있습니다.
1. json_serializable
패키지
json_serializable
는 JSON 변환 로직을 자동 생성해주는 패키지입니다.
설치
pubspec.yaml
에 아래를 추가:
dependencies:
json_annotation: ^latest_version
dev_dependencies:
build_runner: ^latest_version
json_serializable: ^latest_version
사용법
- 모델 클래스 작성
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
사용법
- 모델 클래스 작성
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.dart
와 user.g.dart
파일이 생성됩니다.
freezed
의 장점:
- 불변성을 지원합니다.
copyWith
메서드가 자동 생성됩니다.- 보다 더 강력한 데이터 클래스 생성이 가능합니다.
결론
- 간단하고 직렬화만 필요한 경우:
json_serializable
- 불변성과 추가 기능이 필요한 경우:
freezed
둘 중 어떤 패키지가 적합한지 선택하면 좋습니다. 필요하면 추가적인 도움을 요청하세요! 😊
'[====== Development ======] > Flutter' 카테고리의 다른 글
Flutter - Singleton 패턴 (0) | 2024.11.14 |
---|---|
Flutter - 여러 버전의 Dark SDK 사용하는 방법 (2) | 2024.11.07 |
안드로이드 디바이스에서 디버깅시 화면이 꺼지지 않도록 유지하는 방법 (0) | 2024.08.03 |
[Flutter] 여러가지 생성자 사용법 (1) | 2024.07.12 |
[Flutter] 자식 Widget에서 부모 Widget 으로 이벤트 전달 (0) | 2024.07.07 |