작성
·
460
0
영상 3분 47초쯤에
//shallow copy with Object.assign()
부분에서 bArray와 cArray를 비교하는데, 참조하는 위치가 달라서 같지 않다고 false를 반환합니다.
shallow copy가 주소값만을 복사하고 deep copy가 값을 하나하나 복사하려 독립적인 메모리를 차지하는 것으로 알고 있는데, 어느 부분에서 잘못 이해한 건가요?ㅜㅜ
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
백스님의 질문에 대한 답변을 드리겠습니다.
님께서 말씀하신 ‘얕은 복사(Shallow Copy)‘와 ‘깊은 복사(Deep Copy)‘에 대해 조금 혼동이 있으신 것 같아요.
얕은 복사는 객체의 최상위 수준의 속성들만 복사하여 새 객체를 생성합니다. 만약 속성 값 중에 객체가 있다면, 그 객체의 참조(주소 값)만 복사하게 됩니다. 따라서 복사된 객체와 원본 객체는 중첩된 객체에 대해선 동일한 참조를 공유하게 되죠.
깊은 복사는 객체에 중첩된 객체까지 모두 새롭게 복사하여, 완전히 독립된 메모리를 차지하는 새 객체를 만듭니다. 따라서 원본과 복사된 객체 간에 어떤 참조도 공유하지 않습니다.
영상에서 Object.assign()
을 이용한 부분은 얕은 복사를 수행하는 예입니다. 이 때 bArray
와 cArray
가 가리키는 중첩된 객체의 참조는 동일하므로, 이를 비교할 때 false
를 반환하는 것은 올바른 동작입니다.
만약 bArray
와 cArray
내부에 배열이나 객체와 같은 참조형 데이터가 저장되어 있다면, 이들의 참조 값(주소)은 동일할 것이므로 얕은 복사에서는 원본 데이터에 영향을 줄 수 있습니다. 깊은 복사를 원한다면 JSON.parse(JSON.stringify(object))
같은 방법 또는 깊은 복사를 지원하는 라이브러리 함수를 사용해야 합니다.
님의 코드에 대한 구체적인 상황은 제가 직접 볼 수 없기 때문에 지금 드린 설명이 정확한 답변이 되었을지 모르겠습니다. 만약 더 구체적인 도움이 필요하다면, 해당 강의의 ‘질문하기’ 기능을 통해 강사님께 질문하시면 더 정확한 피드백을 받으실 수 있을 것입니다.
도움이 되셨길 바랍니다. 프로그래밍 학습에 더 많은 성취가 있기를 진심으로 응원합니다!