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 직렬화 및 역직렬화를 자동으로 처리할 수 있다.