6.깊은 복사 CRUD

강재영's avatar
Sep 27, 2024
6.깊은 복사 CRUD
 

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는 원본 리스트인 listDog(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

강재영 블로그