Flutter

깊은 복사, 얕은 복사

열곰탱 2022. 11. 25. 10:37

위의 코드는 얕은 복사이고 아래의 코드는 깊은 복사이다.

얕은 복사인 경우 test1에 list1을 복사를 하지만 메모리 주소를 공유합니다.

쉽게 생각하면 얕은 복사 = 공유를 생각하시면 된다.

그래서 밑에 test1의 첫번째 값인 10을 100으로 변경하고 원본인 list1을 찍으면 바뀐 값이 나오는 것을 확인할 수 있다.

 

깊은 복사는 값 전체를 가지고 와서 나는 나고, 너는 너다라고 새각을 하면 됩니다. 때문에 메모리 상의 주소도 완전히 달라진다. 마찬가지로 얕은 복사처럼 원본(list2) 값을 test2 변수에 복사하고 test2의 첫 번째 값을 100으로 변경했는데 원본을 찍었더니 원본 그대로 나온다.

void main() {
  List<int> list1 = [10, 20, 30, 40];
  List<int> test1 = list1;
  test1[0] = 100;
  print(list1);

  List<int> list2 = [10, 20, 30, 40];
  List<int> test2 = [...list2];
  test2[0] = 100;
  print(list2);
}