• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

dart의 불변 객체에 대해

22.08.31 11:04 작성 조회수 222

0

불변 객체를 만든다는 의미가 변수들을 final로 선언하면 되는 것으로 알고 있었습니다.

  1. 그런데 강의 20분 쯤에 다른 언어에서는 불변 객체를 다루는 문법을 제공한다고 하는데 어떤 것이 있는지 궁금합니다.(final로 다루는 것 외에 또다른 방법이 있는지?)

  1. dart에서는 일반 클래스를 만들고 나서 불변 객체로 다루기 쉽지 않다고 하셨는데 copyWith 같은 데이터 변경을 말하는 것인가요?

답변 1

답변을 작성해보세요.

3

final 은 상수를 정의할 때 사용합니다. 상수로 정의하면 해당 인스턴스가 위치한 메모리 수정이 안 되는 것입니다.

final 객체의 경우에는 내부 메서드를 통해 내용이 언제든 수정이 가능하지요.

여기서 객체는 class로 정의한 인스턴스를 말하는데요.

클래스의 인스턴스를 불변 객체로 만들려면 모든 프로퍼티를 final 선언하면 됩니다. 하지만 내부에 List 같은 다른 객체가 있으면 List 자체의 레퍼런스는 변경이 불가능하지만 List의 메서드를 통해서 객체가 변경될 수 있습니다.

즉 final 선언만으로는 완전한 불변객체가 아닌 셈입니다.

불변 객체를 중심으로 프로그래밍을 하려면 복사를 통해서 특정 프로퍼티 값을 바꾸게 되는데 Dart는 copyWith() 같은 것을 기본적으로 제공하지 않습니다.

Kotlin 같은 언어에서는 애초에 불변 리스트 같은 것도 제공하고 copyWith() 같은 기능이 클래스에 기본 지원이 되기도 합니다.

따라서 freezed를 통해서 이런점들을 보완할 수 있습니다.

두 질문에 대한 답이 되었을 것 같습니다.