논리적 사고

객체를 복사했는데 원본 안의 수량도 바뀌는 이유는?

바깥 객체만 복사한 경우와 안쪽 객체도 복사한 경우를 실행해, 두 변수가 공유하는 자료가 무엇인지 확인합니다.

바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교
바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교
그림 크게 열기 ↗SVG 저장

그림에서 무엇을 볼까요?

바깥 객체는 서로 다르지만 stock 객체를 함께 참조하는 경우와 stock도 별도로 복사하는 경우의 비교

가상 재고 자료 original={name:'연필',stock:{count:3}}를 복사한다고 합시다. name에는 문자열이 있고, stock에는 count라는 수량 항목을 가진 안쪽 객체가 있습니다. 객체는 이름과 값을 짝지은 자료 모음입니다. 바깥에 새 객체를 만들었다는 사실만으로 안쪽 객체까지 새로 만들어졌다고 결론 내릴 수는 없습니다.

전개 구문 ...은 여기서 원본의 항목을 새 바깥 객체로 옮깁니다. const copy={...original}이면 original과 copy는 서로 다른 바깥 객체입니다. 하지만 stock의 값은 같은 안쪽 객체를 가리키는 참조입니다. 참조는 객체 자체를 반복해서 만드는 대신 같은 객체를 가리키는 연결로 생각할 수 있습니다.

함께 확인할 점

바깥만 복사·안쪽 수량 변경에서 양쪽 수량과 stock의 동일성을 확인합니다. 수정 경로를 바깥 이름으로 바꾸어 원본 이름이 유지되는지 비교합니다. stock도 복사한 뒤 수량을 바꾸고 초기화합니다.

생각해 볼 질문

복사본에서 바꾸려는 항목까지의 경로를 적고, 그 경로에서 새로 만들어야 할 객체가 어느 것인지 그려 보세요.

← 논리적 사고 그림 더 보기