일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Code Generation
- 플러터
- 유데미 러닝크루
- vscode
- python
- 도서
- 책
- 유데미
- dart
- 개발자도서
- 가상환경
- 파이썬
- 개발자
- 수학 애니메이션
- 디자인패턴
- 코딩
- 개발
- manim
- 명령어
- 디자인
- 프로그래밍
- command
- 리눅스
- flutter
- 한빛미디어
- 위젯
- column
- 다트
- 맥
- linux
- Today
- Total
승상의 코딩 블로그
[Flutter] clone, copyWith 를 활용한 깊은 복사 본문
복사에는 얕은 복사(shallow copy)와 깊은 복사(deep copy)가 있다.
얕은 복사
얕은 복사는 객체의 참조값만 복사한다.
(원본 객체와 동일한 메모리 주소값을 참조하는것이다.)
즉, 데이터를 "공유"하는 것이다.
위 코드는 얕은 복사에 대한 예시이다.
데이터를 공유하기 떄문에 x 객체의 값을 변경하였는데, y 객체의 값도 변경되었다.
얕은 복사는 메모리 데이터가 공유되기 때문에 메모리를 절약할 수 있다.
하지만, 일반적인 프로그램에서는 메모리 부족에 대한 문제를 겪기 힘들것이다.
복잡한 프로그램이라면 데이터의 독립성을 보장하여 사이드 이펙트(버그)가 생기지 않도록 하는것이 더 효과적이다.
깊은 복사
깊은 복사를 사용하면 객체의 값 자체를 복사하여 독립적인 객체를 만들 수 있다.
깊은 복사는 객체를 다시 생성하면 된다.
위 코드는 깊은 복사에 대한 예시이다.
그러나 매번 이렇게 값을 생성자에 전달할려고 하니 번거롭다.
clone 함수를 통한 객체 전체 복사
객체 생성을 위한 clone 함수를 만들어서 매번 객체 생성자에 인자를 넣지 않고 호출할 수 있다.
그러나, 객체의 값을 변경한 새로운 객체를 만들고 싶을 수도 있다.
copyWith 함수를 통한 객체 값 변경 후 복사
대부분의 경우에는 객체의 일부 값을 변경하여 깊은 복사를 사용하는 경우가 많다.
(데이터의 불변성을 유지하기 위해서임)
* 데이터 불변성을 위해선는 클래스 내부의 데이터를 final 로 선언해야하지만 깊은 복사에 대한 예시를 알려주기 위해서 final 키워드는 제거한 채로 예시를 적음.
* 대부분의 경우, 불변성을 위해 final 키워드를 사용함. 그러므로 객체에 접근하여 데이터를 변경할 수 없음. 값의 변경은 객체를 다시 생성함으로써 이뤄짐. 그래서 대부분의 경우에 copyWith 함수를 사용함.
'Flutter (플러터)' 카테고리의 다른 글
[Flutter] extension 으로 코드를 더 깔끔하고 효율적으로 만들기 (0) | 2024.12.19 |
---|---|
[Flutter] 불변 객체를 왜 사용할까? (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 |