dart의 불변 객체에 대해
357
작성한 질문수 5
불변 객체를 만든다는 의미가 변수들을 final로 선언하면 되는 것으로 알고 있었습니다.
그런데 강의 20분 쯤에 다른 언어에서는 불변 객체를 다루는 문법을 제공한다고 하는데 어떤 것이 있는지 궁금합니다.(final로 다루는 것 외에 또다른 방법이 있는지?)
dart에서는 일반 클래스를 만들고 나서 불변 객체로 다루기 쉽지 않다고 하셨는데 copyWith 같은 데이터 변경을 말하는 것인가요?
답변 1
3
final 은 상수를 정의할 때 사용합니다. 상수로 정의하면 해당 인스턴스가 위치한 메모리 수정이 안 되는 것입니다.
final 객체의 경우에는 내부 메서드를 통해 내용이 언제든 수정이 가능하지요.
여기서 객체는 class로 정의한 인스턴스를 말하는데요.
클래스의 인스턴스를 불변 객체로 만들려면 모든 프로퍼티를 final 선언하면 됩니다. 하지만 내부에 List 같은 다른 객체가 있으면 List 자체의 레퍼런스는 변경이 불가능하지만 List의 메서드를 통해서 객체가 변경될 수 있습니다.
즉 final 선언만으로는 완전한 불변객체가 아닌 셈입니다.
불변 객체를 중심으로 프로그래밍을 하려면 복사를 통해서 특정 프로퍼티 값을 바꾸게 되는데 Dart는 copyWith() 같은 것을 기본적으로 제공하지 않습니다.
Kotlin 같은 언어에서는 애초에 불변 리스트 같은 것도 제공하고 copyWith() 같은 기능이 클래스에 기본 지원이 되기도 합니다.
따라서 freezed를 통해서 이런점들을 보완할 수 있습니다.
두 질문에 대한 답이 되었을 것 같습니다.
그래프 그리기 위한 API가 프리미엄 요금제를 구독해야만 가능하다고 합니다...ㅜㅜ
0
94
2
api 제한량 25회
0
112
2
프로젝트 전체 소스코드
0
69
2
DTO 작성시 freezed 3.0 변경 부분 문의
0
184
2
클린아키텍처 의존관계 관련
0
230
2
mapper 생성 시...
0
178
1
강의에 있는 모든 freezed를 제거해도 되나요?
0
264
2
수업과 관련이 없지만 물을 곳이 없어...교수님께 여쭙니다..
0
372
1
뷰모델 생성자로 리스트 불러오
0
229
1
개남님 질문있씁니다! company_listing_entitiy가 왜 엔티티 인가요?
0
204
1
안녕하세요 디버그 모드 관련 여쭤볼게 있어요
0
301
1
다음 로드맵 질문
0
352
1
csv_parser라는 abstract를 작성하는 필요성이 궁금합니다
0
411
1
repository에 관하여
0
365
1
강의 예시에 대한 답변이 궁금합니다.
0
368
1
flutter 실행 관련 질문드립니다.
0
1072
1
폴더 구조에 대해 질문드립니다.
0
829
1
Repository test 관련해 질문이 있습니다.
0
266
1
stock_repository_impl.dart 에러
0
274
2
viewModel에서 context를 받는 행위 질문
0
388
1
stockApi 질문 드립니다.
0
184
1
stockApi 질문
0
270
1
라이브 템플릿 영상
0
320
1
StockApi 메서드 반환 타입에 대해
0
288
1





