Freezed를 사용하여 데이터 클래스 만들기
이른바 Freezed
Freezed는 Dart 언어로 데이터 클래스를 생성할 수 있는 프로그램 라이브러리입니다.
==
toString
CopyWith
ToJson
FromJson
자세한 내용은 공식 문서에 기재되어 있으니 확인해 주십시오.
컨디션
본 글은 다음과 같은 환경에서 동작 확인을 진행하였다.
설정
Build Runner
Freezed에서 Build Runner 라이브러리를 사용하여 코드를 생성합니다.VScode에서 Build Runner를 쉽게 조작할 수 있도록 확장 기능을 미리 설치합니다.
Freezed
Freezed를 사용하여 데이터 클래스를 만들 때는 Freezed 레코드 클래스를 사용해야 합니다.VScode는 이러한 범주를 설명하는 확장 기능을 자동으로 생성하기 때문에 설치합니다.
인텔리제이와 안드로이드 스튜디오의 경우 프리즈드용 라이브 템플렉스를 준비한 것 같다.IntelliJ 및 Android Studio를 사용할 때는 여기.를 설치하는 것이 좋습니다.
종속성 추가
Freezed
pubspec.yaml
를 사용하기 위해 다음과 같은 의존 관계를 추가합니다.name: sample
description: A simple command-line application.
version: 1.0.0
# homepage: https://www.example.com
environment:
sdk: '>=2.14.4 <3.0.0'
dependencies:
freezed_annotation: ^1.0.0 # これを追加する
json_serializable: ^6.0.1 # 必要であれば追加する
dev_dependencies:
lints: ^1.0.0
build_runner: ^2.1.5 # これを追加する
freezed: ^1.0.0 # これを追加する
데이터 클래스 만들기
데이터 클래스의 초기 형태 만들기
명령 트레이에서 Freezed:Generate a new Freezed class 메뉴를 선택합니다.
다음 생성할 클래스 이름을 입력하십시오.
이번에는'애니멀'이라는 반을 만들어 보려고 한다.
이어 toJson과 fromJson을 지원할지 여부를 결정한다.
이번에는 toJson과 fromJson을'No'로 지지하지 않으려고 한다.
그리고 마지막으로 파일의 출력 위치를 결정합니다.
이번에는 Dart 프로젝트의
bin
폴더로 출력해 봅시다.(가끔 오류 대화 상자가 나타나지만 문제가 없습니다.)
데이터 클래스의 초기 형태 편집
bin
폴더에서 다음과 같은 내용을 생성하는 Animal
클래스.이때는 오류가 있었지만 나중에 없앨 수 있어 문제없다.
import 'package:freezed_annotation/freezed_annotation.dart';
part 'animal.freezed.dart';
part 'animal.g.dart';
class Animal with _$Animal {
factory Animal() = _Animal;
factory Animal.fromJson(Map<String, dynamic> json) =>
_$AnimalFromJson(json);
}
이 Animal
류에 필요한 속성을 정의합니다.이번에는
Animal
반에 추가name
와age
를 시도해 보자.import 'package:freezed_annotation/freezed_annotation.dart';
part 'animal.freezed.dart';
part 'animal.g.dart';
class Animal with _$Animal {
factory Animal({String? name, int? age}) = _Animal;
}
명령 트레이에서 Build Runner: Build
메뉴를 선택합니다.그래서 애니매al.freezed.데이터 클래스의 생성이 완료되었습니다.
동작 확인
이번에
toJson
와 fromJson
의 설치를 생략하였으며, 아래 3가지 기능을 사용할 수 있다.==
toString
CopyWith
Animal
류를 확인합니다.출력 결과를 똑똑히 보기 위해 각 기능은 문제없이 작동하고 있다.
샘플 코드
void main(List<String> arguments) {
var yagi = Animal(name: "Yagi", age: 0);
print("■ PROPERTY AND TOSTRING");
print("name ${yagi.name}");
print("age ${yagi.age}");
print("toString $yagi");
var ushi = Animal(name: "Ushi", age: 0);
var clone = yagi.copyWith();
print("■ COMPARE");
print("== ${yagi == ushi}");
print("== ${yagi == clone}");
var renameYagi = yagi.copyWith(name: "ああああ");
var oldYagi = yagi.copyWith(age: 100);
print("■ COPY WITH");
print("toString $renameYagi");
print("toString $oldYagi");
}
결과 내보내기
■ PROPERTY AND TOSTRING
name Yagi
age 0
toString Animal(name: Yagi, age: 0)
■ COMPARE
== false
== true
■ COPY WITH
toString Animal(name: ああああ, age: 0)
toString Animal(name: Yagi, age: 100)
참고 문헌
Reference
이 문제에 관하여(Freezed를 사용하여 데이터 클래스 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kaleidot725/articles/2021-11-24-dart-freezed텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)