Dataclass 와 MVI

kotlin 에는 DataClass 라는 객체가 존재합니다.

Data classes | Kotlin

간단하게 설명하자면 해당 DataClass 는 “불변성” 을 보장하는 kotlin 이 제공하는 객체입니다. 이번 프로젝트 구성에서 채택한 MVI 구조는 Model View Intent 로서,

View 가 Intent 에 있는 데이터를 통해서 화면을 그리는 아키텍쳐입니다.

그렇기 때문에 MVI 에서는 Intent 가 Immutable 이 보장되어야 합니다. 단순한 immutable 한 객체를 만들기는 flutter 에서 final 과 같은 prefix 를 사용하여 만들 수 있지만,

kotlin 의 data class 가 제공하는 method 와 기능을 유사하게 제공하는 객체가 있다면 MVI 구현에 있어 더 수월할 것이라는 생각이 들어 freezed 패키지를 사용하였습니다.

freezed | Dart package

freezed 는 data class 처럼 immutable 한 class 를 사용자에게 제공합니다. 또한 freezed 가 제공하는 method 를 통해 data 의 사용을 용이하게 가져갈 수 있습니다.

기존에 Kotlin 에서는 Data Class 의 copyOf 를 사용하여 MVI 를 구현하였습니다. 그렇기에 비슷한 method 인 copyWith 을 제공하는 feezed 패키지를 선택하여 해당 프로젝트의 MVI 를 구현하기로 결정하였습니다.