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 포맷의 데이터를 객체로 역직렬화합니다.