
Dart에서 코드 생성기를 사용하면 반복적인 코드를 자동으로 생성할 수 있어 개발 효율성을 크게 향상시킬 수 있습니다.
copyWith() 메서드를 통해 객체를 복사하고 특정 속성만 변경할 수 있습니다.fromJson() 및 toJson() 메서드를 통해 객체와 JSON 간의 변환을 자동화합니다.== 및 hashCode 메서드를 자동 생성하여 객체의 값을 비교할 수 있습니다.toString() 메서드를 통해 객체의 상태를 쉽게 로깅할 수 있습니다.커스텀 클래스를 만들 때, 매번 반복적으로 구현해야 하는 코드들이 있습니다. 이를 자동으로 생성하면 개발 시간을 절약할 수 있습니다. 다음 패키지들을 이용하면 이러한 반복되는 코드들을 자동으로 생성할 수 있습니다.
==, hashCode, copyWith(), toString()fromJson(), toJson()dev_dependency 설치:
dart pub add -d freezed build_runner json_serializable
dependency 설치:
dart pub add freezed_annotation json_annotation
dev_dependency 설치:
dart pub add -d freezed build_runner json_serializable
dependency 설치:
dart pub add freezed_annotation json_annotation
freezed 코드를 쉽게 작성하도록 도와주는 확장 프로그램.person.dart 파일 생성bin 폴더 아래에 code_generator 폴더를 만들고, 그 안에 person.dart 파일을 생성합니다.
person.dart 파일에 frf를 입력한 후, 자동 완성을 통해 다음과 같이 Person 클래스를 작성합니다.
import 'package:freezed_annotation/freezed_annotation.dart';
part 'person.freezed.dart';
part 'person.g.dart';
class Person with _$Person {
  const factory Person({
    required String name,
    required int age,
  }) = _Person;
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
}
dart run build_runner build
이 명령어를 실행하면 person.freezed.dart와 person.g.dart 파일이 생성됩니다.
person.dart 파일의 생성자에 int age 속성을 추가하고, Watch 버튼을 클릭하여 코드 변경 시 자동으로 생성되도록 설정합니다.
code_generator 폴더 아래에 main.dart 파일을 만들고, 아래와 같은 코드를 작성하여 생성된 함수들을 확인합니다.
import 'dart:convert';
import 'person.dart';
void main() {
  Person a = Person(name: '철수', age: 10);
  Person b = a;
  /// copyWith()
  a = a.copyWith(name: '영희');
  /// toString()
  print("toString() : $a");
  print("toString() : $b");
  /// 값 비교(Value Equality)
  bool valueEquality = Person(name: "철수", age: 1) == Person(name: "철수", age: 1);
  print("값 비교 : $valueEquality");
  /// JSON 직렬화(Serialization)
  Map<String, dynamic> map = a.toJson();
  print("toJson() : $map");
  String jsonString = jsonEncode(map);
  /// JSON 역직렬화(Deserialization)
  Map<String, dynamic> jsonMap = jsonDecode(jsonString);
  Person person = Person.fromJson(jsonMap);
  print("fromJson() : $person");
}
copyWith(): 객체의 속성을 변경할 수 있는 메서드입니다.toString(): 객체의 속성을 문자열로 출력하는 메서드입니다.==와 hashCode를 통해 객체의 값을 비교합니다.toJson(): 객체를 JSON 포맷으로 직렬화합니다.fromJson(): JSON 포맷의 데이터를 객체로 역직렬화합니다.