객체를 복사했는데 원본 안의 수량도 바뀌는 이유는?
바깥 객체만 복사한 경우와 안쪽 객체도 복사한 경우를 실행해, 두 변수가 공유하는 자료가 무엇인지 확인합니다.
그림에서 무엇을 볼까요?
바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교
가상 재고 자료 original={name:'연필',stock:{count:3}}를 복사한다고 합시다. name에는 문자열이 있고, stock에는 count라는 수량 항목을 가진 안쪽 객체가 있습니다. 객체는 이름과 값을 짝지은 자료 모음입니다. 바깥에 새 객체를 만들었다는 사실만으로 안쪽 객체까지 새로 만들어졌다고 결론 내릴 수는 없습니다.
전개 구문 ...은 여기서 원본의 항목을 새 바깥 객체로 옮깁니다. const copy={...original}이면 original과 copy는 서로 다른 바깥 객체입니다. 하지만 stock의 값은 같은 안쪽 객체를 가리키는 참조입니다. 참조는 객체 자체를 반복해서 만드는 대신 같은 객체를 가리키는 연결로 생각할 수 있습니다.
함께 확인할 점
바깥만 복사·안쪽 수량 변경에서 양쪽 수량과 stock의 동일성을 확인합니다. 수정 경로를 바깥 이름으로 바꾸어 원본 이름이 유지되는지 비교합니다. stock도 복사한 뒤 수량을 바꾸고 초기화합니다.
생각해 볼 질문
복사본에서 바꾸려는 항목까지의 경로를 적고, 그 경로에서 새로 만들어야 할 객체가 어느 것인지 그려 보세요.
