Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 가상환경
- 개발자
- 개발
- flutter
- 다트
- linux
- 유데미 러닝크루
- ExpansionTile
- 리버팟
- freezeD
- vscode
- Code Generation
- 유데미
- copyWIth
- 코딩
- 플러터
- 유데미 코리아
- 책
- ListTile
- 명령어
- 맥
- 리눅스
- 디자인패턴
- riverpod
- command
- 도서
- dart
- 파이썬
- 프로그래밍
- python
Archives
- Today
- Total
승상의 코딩 블로그
[Flutter] 불변 객체를 왜 사용할까? 본문
왜 불변 객체을 써라고 하는 것일까?
* 불변 객체만 쓰라는 것은 아니다. 대부분의 경우에 장점이 많기 때문이다
* 대부분의 경우에서 불변 객체의 단점을 장점이 상쇄시킨다.
- 불변 객체를 사용하면 외부에서 의도하지 않은 수정으로부터 객체를 보호할 수 있다.
코드는 한 사람만이 개발하는 것이 아니다.
즉, 내가 구현한 객체가 의도치 않게 외부에서 수정될 수 있다. - 데이터와 로직의 흐름을 파악하기 쉽다.
데이터가 변경이 일어날 경우, 이를 추적하면 코드를 파악하는 것은 쉽지 않다.
데이터가 불변이 아니라면, 데이터가 변경이 되지 않았음을 계속해서 파악해야한다.
자신이 코드를 작성할 경우에는 로직을 정확히 파악하고 모든것을 컨트롤 할 수 있다고 생각할 수 있다.
(내가 처음에 이랬다)
그러나 개발하는 시스템이 복잡해지고 시간이 지나감에 따라 내 기억에는 한계가 보이기 시작할 것이다. - 멀티 쓰레드를 사용할 경우, 데이터 동기화에 대한 부담이 준다.
여러 쓰레드에서 동시에 읽어도 항상 동일한 데이터이므로 문제가 없다. - 캐싱과 해싱
데이터가 변경되지 않으므로 캐싱에 적합하다.
그러나 대부분의 데이터는 변경된다고 생각한다.
해쉬 값으로 사용할 경우(Map 등 해쉬 값을 사용하는 부분)에 오작동을 변경한다.
(해쉬값으로 키값이 설정되는데 객체의 내용이 변경하지 않으니, 해쉬값을 활용해도 안전하다는 뜻이다)
사용방법
플러터에서는 final 과 const 를 활용하여 불변객체를 만들 수 있다.
불변객체라도 데이터의 변경이 일어나야하므로, 아래 포스팅의 copyWith 함수를 만들어서 활용했다.
(값이 변경하여 다시 불변객체를 만들어야 함. 코드상으로 가독성높인 것이 copyWith 함수이다.)
2024.12.19 - [Flutter (플러터)] - [Flutter] clone, copyWith 를 활용한 깊은 복사
Freezed 패키지를 활용하면 쉽게 불변객체를 만들 수 있다.
2023.08.22 - [Flutter (플러터)] - [Flutter] 불변객체와 내부 속성을 쉽게 만들어주는 freezed 패키지
반응형
'Flutter (플러터)' 카테고리의 다른 글
[Flutter] extension 으로 코드를 더 깔끔하고 효율적으로 만들기 (0) | 2024.12.19 |
---|---|
[Flutter] clone, copyWith 를 활용한 깊은 복사 (0) | 2024.12.19 |
[Flutter] 페이지 이동(Navigate with named routes) (0) | 2024.07.28 |
[Flutter] 폰트(font) 추가하기 (0) | 2024.07.13 |
[Flutter] Riverpod(리버팟) - FutureProvider (0) | 2024.01.01 |
Comments