🔹 1. 얕은 복사 (Shallow Copy)

객체의 1차원적인 값들만 복사하고, 내부의 참조(포인터)는 그대로 유지하는 복사 방식

특징

예제 (Dart에서 얕은 복사)

void main() {
  List<int> original = [1, 2, 3];
  List<int> shallowCopy = original;  // 얕은 복사 (주소를 공유)

  shallowCopy[0] = 100;

  print(original); // [100, 2, 3] (원본도 변경됨)
  print(shallowCopy); // [100, 2, 3]
}

🔴 원본(original)과 복사본(shallowCopy)이 같은 메모리 주소를 가리키므로, 변경이 같이 일어남!


🔹 2. 깊은 복사 (Deep Copy)

객체 내부의 모든 값과 참조형 데이터까지 새롭게 복사하여 원본과 완전히 독립적인 객체를 만드는 복사 방식

특징

예제 (Dart에서 깊은 복사)

void main() {
  List<int> original = [1, 2, 3];
  List<int> deepCopy = List<int>.from(original);  // 깊은 복사

  deepCopy[0] = 100;

  print(original); // [1, 2, 3] (원본 유지)
  print(deepCopy); // [100, 2, 3] (복사본만 변경됨)
}

List<int>.from(original)을 사용하여 새로운 리스트를 생성하여 완전히 독립적인 객체를 만들었음.

🔹 JSON을 이용한 깊은 복사 (Deep Copy with JSON)