본문 바로가기
JavaScript

[Simple] Deep Copy vs Shallow Copy

by sabb12 2024. 5. 22.

 

Deep Copy

1. array 변수의 값을 새로운 newArray 변수에 할당 했습니다.

2. 우리가 생각 했을때는 array랑 newArray는 같은 값을 가지고 있다고 생각 하겠지만

3. 스프레드 연산자(Spread Operation)를 사용 했기 때문에 원래 배열과 동일한 요소를 가진 새로운 배열 객채를 생성한다. 즉, 메모리에서 별도의 객채로 저장 된다.

4. array의 주소(0x11)이면 newArray의 주소(0x4v)가 되서 false나 나오는 것이다.

 

▶ 주소값 대해서 이해 안된다면 실행컨텍스트(Execution Context) 대해서 더 깊게 공부를 하시면 됩니다

 

 

Shallow Copy

1. 그냥 array 변수를 newArray에 할당 하게 되면, newAarray는 새로운 배열이 아니라 메모리에서 동일한 배열을 가리키는 또 다른 참조이다. 즉, array와 newArray는 동일한 배열 객체를 가리킨다는 뜻이다. 

2. 따라서 하나의 배열에 변경을 가하면 다른 배열에도 반영된다.

 

Deep Copy에 대한 질문!

Q. 그럼 const newArray에 [...array]를 할당 하게 되면 원본인 array 데이터 사용안하게되는데  array는 어떻게 되는건가요?

      A. Garbage collector 통해서 사용안하는 데이터는 삭제가 된다.