YD_S 개발로그
article thumbnail
Published 2023. 5. 17. 16:07
freezed (Code Generation) Flutter
  • Flutter 에서 사용하는 dart 언어에서 Model 클래스를 만들기 위해 다양한 기능을 override하거나 직접 구현해야한다.
  • Freezed는 이러한 번거로움을 단번에 해결할 수 있는 유용한 플러그인이다.
  • Flutter Favorite이므로 믿고 사용할 수 있다.
  • Freezed에서 제공하는 기능으로 인해 Bloc, Retrofit을 사용할 때 함께 사용하면 더욱더 진가를 발휘한다.

 

Freezed의 기능

  • 생성자(constructor)와 프로퍼티(properties) 자동 생성 
  • toString, operator == , hashCode 함수를 ovrride 해준다.
  • copyWith를 사용해서 객체를 복제
  • 직렬화/역직렬화 지원
  • Union 타입과 sealed class

Dependency 추가

 

생성자와 프로퍼티 자동 생성

  • 'part 파일명.freezed.dart'를 추가해준다/
  • JSON 직렬화/역직렬화를 사용할 경우 'part 파일명.g.dart'를 추가해준다.
Terminal 입력
flutter pub run build_runner build 

 

Override 함수(toString, operator ==, hashCode) 자동 생성

toString 함수

  • toString()이 자동 override되어 객체의 프로퍼티를 출력해준다.

 

 

Operator ==, hashCode 함수

  • operator ==, hashCode함수가 override되어 객체를 == 로 비교할 수 있다.

 

CopyWith를 사용해서 객체를 복제

Copy

  • copyWith 함수를 사용해 객체의 일부분만 변경하여 복제할 수 있다.

 

DeepCopy

  • Freezed로 생성된 객체 내에 객체 프로퍼티를 변경할 경우 copyWith를 여러번 호출하지 않고 프로퍼티로 접근한다.
  • 변경하고자 하는 프로퍼티가 ?(Nullable)하다면 .call()을 사용하여 Nullsafe하게 만들 수 있다.

 

직렬화/역직렬화 지원

직렬화

  • JSON의 역직렬화를 사용하기 위해선 fromJson 함수를 작성해야한다.
  • fromJson 함수를 쓰기위해선 json_serializable 플러그인이 dependency되어 있어야한다.
  • fromJson 함수를 사용하여 JSON을 객체로 변환한다.

역직렬화

  • fromJson 함수가 정의되어 있으면 toJson 함수가 자동적으로 생성된다.
  • toJson 함수를 이용하여 객체를 JSON로 변환한다.

 

Union 타입과 sealed class

  • 다른 언어(ex. Kotlin)등에서 사용하는 문법이지만 dart 언어에서는 현재(23.05.17 기준) 지원하지 않고있다.
  • Freezed 플러그인으로 생성된 코드를 통해 동일한 기능을 사용한다.
  • state 관리하는데 사용할 수 있다.
  • is와 as 를 사용하여 타입 체크, 형변환 등을 사용하지 않도록 주의한다.
  • when 함수의 경우 객체내 프로퍼티를 매개변수로 받는다.
  • map 함수의 경우 객체를 매개변수로 받는다. (copyWith 사용 가능)

 

 

Reference

https://pub.dev/packages/freezed

 

freezed | Dart Package

Code generation for immutable classes that has a simple syntax/API without compromising on the features.

pub.dev

 

profile

YD_S 개발로그

@YD_S

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!