[JavaScript] 얕은 복사(shallow copy) vs 깊은 복사(deep copy)

성지혜·2022년 10월 15일
0

❗️얕은 복사(shallow copy)란?

  • 최소한의 복사를 한다.
  • 값을 복사한다 하더라도, 같은 데이터 주소에 저장된 메모리를 공유한다. 값 자체를 복사하는 것이 아니라 주소값을 복사 하여 같은 메모리를 가리킨다.
  • 따라서 깊은 복사보다 상대적으로 빠르다.
    (ex. 객체의 프로퍼티가 10000개 일때, 이 모든 데이터 자체를 통째로 복사하는 깊은 복사보다 주소값만 복사하는 얕은 복사가 더 빠를 것이다.)
const obj1 = { a: 1, b: 2};
const obj2 = obj1;
console.log( obj1 === obj2 ); // true

위의 예시처럼 객체를 직접 대입하는 경우, 둘은 같은 데이터(주소)를 가지고 있다.

const obj1 = { a:1, b:2 };
const obj2 = obj1;
obj2.a = 100;
console.log( obj1.a ); // 100

때문에 obj2의 property를 수정하고, obj1을 출력해도 obj2 값과 동일하다.

❗️깊은 복사(deep copy)란?

얕은 복사처럼 주소를 복사해서 공유하는 것이 아니라, 아예 새로운 객체안 속성(property)만 복사해서 사용할 수 없을까?

  • 데이터 자체를 통째로 복사한다
  • 복사된 두 객체는 완전히 독립적인 메모리를 차지한다.
const obj1 = { a:1, b:2 };
const obj2 = { ...obj };
obj2.a = 100;
console.log( obj1 === obj2 ) // false
console.log( obj1.a ) // 1
  • ...(spread) 연산자를 통해 { }안에 obj1의 속성을 복사하여 obj2에 할당하였다.
  • 이제 obj1과 obj2는 다른 주소를 갖게되었다.
profile
많이많이 시도해보기

0개의 댓글