[Dart] 직렬화 (Serialization)

Jinwook Kim·2024년 10월 27일

Dart

목록 보기
7/7
post-thumbnail

다트에서 직렬화(Serialization)는 데이터의 구조나 객체의 상태를, 저장하거나 전송할 수 있는 형식으로 변환하는 과정을 말한다. 업계 표준으로 JSON 방식을 사용하여 데이터를 직렬화하고 역직렬화(Deserialization)한다. 다트에서는 크게 두 가지 방식의 직렬화를 지원한다.

1. 수동 직렬화

수동 직렬화는 직접 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,
  };
}

2. 자동 직렬화

자동 직렬화는 외부 서드파티 라이브러리를 사용하여 직렬화 코드를 자동으로 생성하는 방식이다. 주로 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);
}

요약하자면, 수동 직렬화는 소규모 프로젝트에서 간단히 사용할 수 있는 방식이지만, 프로젝트의 크기가 커진다면 자동 직렬화가 유리하다. 대규모 프로젝트에서 자동 직렬화를 사용하면 장기적으로 유지 보수가 더 쉬워지지만, 초기 설정이 필요하다는 단점은 있다.

profile
200 Everything Okay.

0개의 댓글