Freezed

luneah·2022년 10월 5일
0

Flutter

목록 보기
24/29
post-thumbnail
  • Dart 문법에서 지원하지 않는 기능
    1. toString(), equals, hashCode() 자동 생성 => Equatable 패키지로 해결
    2. 객체의 깊은 복사를 하는 clone 기능
    3. 직렬화 / 역직렬화 (toJson, fromJson)
    4. 패턴 매칭
    5. 기본적으로 모든 객체는 수정이 가능하다.
    6. Sealed Class

Sealed Class

Java15, Kotlin, C# 등에 문법으로 제공되는 기능으로 Enum보다 다양하게 사용하면서 타입을 제한할 수 있다.

Freezed

Dart에서 지원되지 않는 많은 것들을 지원하는 코드 제네레이터 라이브러리

freezed 특징

  • 불변(immutable) 객체
  • 패턴 매칭 지원 (when)
  • fromJson(), toJson() 자동 생성
  • Sealed Class 생성 지원

freezed로 생성한 Result 클래스 - Sealed Class

freezed로 만든 직렬화/역직렬화, 깊은 복사, toString, equals, hashCode 재정의 된 불변 객체 = data class

데이터 클래스 특징

  • immuatable 객체
  • fromJson(), toJson() 자동 생성 지원

freezed 코드 생성

freezed 는 코드 생성 라이브러리다.
build_runner 라이브러리를 통해서 다음 명령으로 코드를 생성한다.

flutter pub run build_runner build

*.freezed.dart, *.g.dart 파일이 생성된다. (생성된 파일은 버전관리에서 제외)

  1. 파라미터의 기본 값 지정 어노테이션 지원

  2. 이벤트를 정의하는 Sealed Class

    • ViewModel에서 패턴 매칭 사용 가능

    • UI에서 이벤트를 통해서만 로직이 수행되도록 제한할 수 있다. ViewModel에는 onEvent()메서드 이외의 메서드를 노출하지 않아야 된다.

  3. 상태를 가지는 state 클래스

    • ViewModel 내에서는 state만 노출한다.

    • ViewModel 내에서 상태가 변경되면 깊은 복사 후 UI 갱신 알림

  4. UI에서는 state를 통해 데이터를 얻는다.

    • UI에서 유저의 행동은 onEvent()로 통일
profile
하늘이의 개발 일기

0개의 댓글