작성
·
309
답변 1
3
final 은 상수를 정의할 때 사용합니다. 상수로 정의하면 해당 인스턴스가 위치한 메모리 수정이 안 되는 것입니다.
final 객체의 경우에는 내부 메서드를 통해 내용이 언제든 수정이 가능하지요.
여기서 객체는 class로 정의한 인스턴스를 말하는데요.
클래스의 인스턴스를 불변 객체로 만들려면 모든 프로퍼티를 final 선언하면 됩니다. 하지만 내부에 List 같은 다른 객체가 있으면 List 자체의 레퍼런스는 변경이 불가능하지만 List의 메서드를 통해서 객체가 변경될 수 있습니다.
즉 final 선언만으로는 완전한 불변객체가 아닌 셈입니다.
불변 객체를 중심으로 프로그래밍을 하려면 복사를 통해서 특정 프로퍼티 값을 바꾸게 되는데 Dart는 copyWith() 같은 것을 기본적으로 제공하지 않습니다.
Kotlin 같은 언어에서는 애초에 불변 리스트 같은 것도 제공하고 copyWith() 같은 기능이 클래스에 기본 지원이 되기도 합니다.
따라서 freezed를 통해서 이런점들을 보완할 수 있습니다.
두 질문에 대한 답이 되었을 것 같습니다.