
다트에서 직렬화(Serialization)는 데이터의 구조나 객체의 상태를, 저장하거나 전송할 수 있는 형식으로 변환하는 과정을 말한다. 업계 표준으로 JSON 방식을 사용하여 데이터를 직렬화하고 역직렬화(Deserialization)한다. 다트에서는 크게 두 가지 방식의 직렬화를 지원한다.
수동 직렬화는 직접 JSON 인코딩과 디코딩을 구현하는 방식이다. 주로 간단한 프로젝트에서 빠르게 직렬화를 구현하고자 할 때 사용되는 방식이다.
class User {
final String name;
final String email;
User({required this.name, required this.email});
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'] as String,
email: json['email'] as String,
);
}
Map<String, dynamic> toJson() => {
'name': name,
'email': email,
};
}
자동 직렬화는 외부 서드파티 라이브러리를 사용하여 직렬화 코드를 자동으로 생성하는 방식이다. 주로 json_serializable 패키지를 사용한다. 이 방식은 대규모 프로젝트에서 주로 사용되고, build_runner 등의 코드 생성기가 별도로 동작해야 한다는 단점이 있다.
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
()
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);
}
요약하자면, 수동 직렬화는 소규모 프로젝트에서 간단히 사용할 수 있는 방식이지만, 프로젝트의 크기가 커진다면 자동 직렬화가 유리하다. 대규모 프로젝트에서 자동 직렬화를 사용하면 장기적으로 유지 보수가 더 쉬워지지만, 초기 설정이 필요하다는 단점은 있다.