복사한 깊이를 확인합니다
가상 재고 자료 original={name:'연필',stock:{count:3}}를 복사한다고 합시다. name에는 문자열이 있고, stock에는 count라는 수량 항목을 가진 안쪽 객체가 있습니다. 객체는 이름과 값을 짝지은 자료 모음입니다. 바깥에 새 객체를 만들었다는 사실만으로 안쪽 객체까지 새로 만들어졌다고 결론 내릴 수는 없습니다.
전개 구문 ...은 여기서 원본의 항목을 새 바깥 객체로 옮깁니다. const copy={...original}이면 original과 copy는 서로 다른 바깥 객체입니다. 하지만 stock의 값은 같은 안쪽 객체를 가리키는 참조입니다. 참조는 객체 자체를 반복해서 만드는 대신 같은 객체를 가리키는 연결로 생각할 수 있습니다.
바깥 이름 변경과 안쪽 수량 변경을 나눕니다
아래 활동의 기본값은 ‘바깥만 복사’와 ‘안쪽 수량을 9로 변경’입니다. copy.stock.count=9를 실행하면 두 자료에서 수량이 모두 9가 됩니다. 같은 stock 객체의 count를 고쳤기 때문입니다. 반면 copy.name='지우개'처럼 바깥 항목의 값을 교체하면 원본 이름은 연필로 남습니다. 어느 경로의 항목을 바꿨는지가 중요합니다.
‘stock도 복사’를 선택하면 const copy={...original,stock:{...original.stock}}와 같은 새 구조를 만듭니다. 이제 두 stock 객체가 다르므로 copy 쪽 수량을 고쳐도 original 쪽 수량은 3입니다. 활동은 값 비교와 함께 original===copy, original.stock===copy.stock도 표시합니다. ===는 여기서 두 객체가 같은 객체인지를 확인합니다.
이 예시의 수정으로 모든 중첩이 해결되지는 않습니다
stock도 복사하는 방법은 이 예시의 두 층 구조에 맞춘 것입니다. stock 안에 다시 객체가 있으면 그 안쪽 참조는 또 공유될 수 있습니다. AI가 ‘독립적인 복사본’이라고 보고한다면 어떤 깊이의 어떤 항목이 독립적인지 실행 결과와 함께 확인해야 합니다.
활동은 매번 새로운 가상 원본을 만든 뒤 복사 방식과 수정 경로를 적용합니다. 앞선 실험의 9가 다음 실험에 누적되지 않습니다. 메서드·접근자·프로토타입·날짜 객체 등의 복잡한 복사는 다루지 않습니다. JSON 변환을 복사에 쓰려는 경우에도 값의 생략과 변환을 먼저 확인해야 합니다. 이번 묶음의 JSON 실험에서 그런 차이를 비교할 수 있습니다.

