Stream과 깊은 복사의 관계
Stream
자체는 비동기 데이터 스트림으로 데이터를 처리하는 방식이며, 일반적인 데이터 흐름을 제어하는 도구입니다. 깊은 복사는 Stream
과 직접적인 관계는 없지만, 비동기 처리 도중 원본 데이터를 변조하지 않기 위해 복사본을 사용하는 경우가 있습니다.- 예를 들어, 스트림을 통해 데이터를 처리할 때, 중간에 데이터를 변경해야 할 경우 원본 데이터를 안전하게 보호하기 위해 깊은 복사를 사용할 수 있습니다.
class Dog {
int age;
String name;
Dog(this.age, this.name);
@override
String toString() {
return 'Dog(age: $age, name: $name)';
}
}
void main() {
// CRUD
final list = [Dog(1, "토토"), Dog(2, "레르코"), Dog(3, "우유")];
//정답
// 1. 추가
var add2 = [...list, Dog(4, "누렁이")]; // 4, "누렁이"
print(add2);
// 2. 수정 (age가 1번인 아이의 이름을 토루토)
var update2 = list.map((e) => e.age != 1 ? e : Dog(e.age, "토루토")).toList();
print(update2);
// 3. 삭제 (age가 3번인 것을 삭제)
var del2 = list.where((e) => e.age != 3).toList();
print(del2);
}
Dart에서 리스트에 대해 CRUD(Create, Read, Update, Delete) 작업을 수행하는 예시입니다. 각각의 작업을 단계별로 설명해 드리겠습니다.
1. 추가 (Create): 리스트에 새로운 요소 추가하기
dart
코드 복사
var add2 = [...list, Dog(4, "누렁이")]; // 4, "누렁이" 추가
print(add2);
- 설명:
add2
는 원본 리스트인list
에Dog(4, "누렁이")
라는 새로운Dog
객체를 추가한 새로운 리스트입니다.
- 구현 방식:
- 전개연산
...list
Dog(4, "누렁이")
는 새로 추가되는 객체입니다.
- 이 두 개를 합쳐서
add2
리스트를 생성하고, 기존 리스트에 영향을 주지 않고 새로운 리스트를 만들어냅니다.
- 출력
[Dog(age: 1, name: 토토), Dog(age: 2, name: 레르코), Dog(age: 3, name: 우유), Dog(age: 4, name: 누렁이)]
2. 수정 (Update): 특정 조건에 맞는 객체 수정하기
var update2 = list.map((e) => e.age != 1 ? e : Dog(e.age, "토루토")).toList();
print(update2);
- 설명:
list
내의 객체 중에서age
가 1인 객체의 이름을"토루토"
로 변경하고, 나머지 객체는 그대로 유지하는 수정 작업입니다.
- 구현 방식:
list.map
은 리스트의 모든 요소를 하나씩 가져와서, 조건에 따라 변경하거나 그대로 유지할 수 있게 합니다.- 조건문
e.age != 1 ? e : Dog(e.age, "토루토")
에서는age
가 1이 아닌 경우에는 원래 객체e
를 그대로 반환하고,age
가 1이면 새로운Dog
객체로 이름만 수정한 후 반환합니다. toList()
로 최종적으로 새로운 리스트를 반환합니다.
- 출력
[Dog(age: 1, name: 토루토), Dog(age: 2, name: 레르코), Dog(age: 3, name: 우유)]
3. 삭제 (Delete): 특정 조건에 맞는 객체 삭제하기
var del2 = list.where((e) => e.age != 3).toList();
print(del2);
- 설명:
list
에서age
가 3인 객체를 삭제하고, 나머지 객체들로 새로운 리스트를 만듭니다.
- 구현 방식:
list.where((e) => e.age != 3)
는 리스트의 모든 요소 중age
가 3이 아닌 객체들만 필터링합니다.toList()
로 필터링된 요소들로 새로운 리스트를 반환합니다.
- 출력
[Dog(age: 1, name: 토토), Dog(age: 2, name: 레르코)]
Share article