[Flutter] Freezed, json_serializable

Angela Jeong·2024년 5월 21일
post-thumbnail

Freezed

  • 불변성을 가진 데이터 모델 (데이터 클래스)을 생성하는 데 사용되는 Dart의 코드 생성 라이브러리
  • 데이터 클래스에 대한 메서드와 편리한 기능을 자동으로 생성해준다.

Freezed 자주 사용하는 메서드

toString

  • 일반적으로 toString()을 실행시키면 인스턴스의 정보만 나오기 때문에 Instance of (Class)로 리턴되어 어떤 값을 가지고 있는지 알 수 없어서 toString()을 오버라이딩을 해야 하지만 Freezed를 사용하면 데이터 모델의 toString() 메서드와 toJson() 메서드를 자동으로 생성해준다.

copy

  • immutable한 객체를 만들기 때문에 freezed에서는 setter를 설정할 수 없다. 따라서 값 변경을 위해서는 copy 메서드를 만들어야 하는데, freezed에서는 copyWith 메서드를 제공한다.

deep copy

  • deep coly란, 원본 객체와 완전히 독립된 복사본을 만들 수 있으며, 복사본을 변경해도 원본 객체에는 영향을 주지 않는 것을 말한다.
  • freezed에서는 deep copy기능을 제공하기 때문에 훨씬 더 적은 코드로도 구현이 가능하다.



json_serializable

  • JSON 직렬화 및 역직렬화를 자동으로 처리해주는 코드 생성 라이브러리
    (JSON 데이터를 Dart 객체로, Dart 객체를 JSON 데이터로 변환)
  • freezed를 쓸 때 직렬화, 역직렬화를 하려면 이 패키지가 필요하다.
  • 그래서 데이터 클래스를 만들 때 함께 많이 사용한다.



나의 경우 API 통신을 위한 모델을 만들 때 이 두가지 패키지를 자주 함께 사용했다.
우선 freezed는 annotation 기반으로 알아서 g.dart 같은 파일을 만들어주니 굉장히 편하다는 장점이 있었다 ㅎ

사실 네트워크 통신을 위한 직렬화, 역직렬화를 할 때 json_serializable로도 충분하지만 둘을 함께 쓰면 freezed의 불변성을 활용하면서 json_serializable을 통해 JSON 직렬화 및 역직렬화를 자동으로 처리할 수 있다.

0개의 댓글