- 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
'Flutter' 카테고리의 다른 글
dart_openai (ChatGPT 패키지) (0) | 2023.05.22 |
---|---|
flutter_dotenv (환경변수 설정) (0) | 2023.05.19 |
flex_color_scheme (Theme 간편 설정) (0) | 2023.05.16 |
Device_Preview (디바이스 별 레이아웃 체크하기) (0) | 2023.05.15 |
Equatable 플러그인을 사용하여 객체 비교하기 (0) | 2023.05.11 |