깊은 복사와 얕은 복사

허정·2022년 9월 23일
0

JS에서 값은 primitive와 reference 타입으로 나뉩니다.

1. Primitive type

(1) 원시값이란

원시값은 값을 복사할 때 복사된 값을 다른 메모리에 할당하기 때문에 원래의 값과 복사된 값이 서로에게 영향을 미치지 않습니다.

(2) 원시 값의 종류

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Symbol

2. Reference type

(1) 참조값이란

참조값은 변수가 객체의 주소를 가리키는 값이기 때문에 복사된 값(주소)이 같은 값을 가리킵니다. 이런한 객체의 특징 때문에 객체를 복사하는 방법은 크게 두가지로 나뉩니다.

(2) 참조 값의 종류

  • Object ( Array, Function, RegExp )
  • Map
  • Set
  • WeakMap
  • WeakSet

3. 얕은 복사

(1) 얕은 복사란

원래 값과 복사된 값이 같은 주소를 참조하고 있는 복사를 얕은 복사라고 합니다. 객체 안에 객체가 있는 경우에도, 하나의 얕은 복사가 있으면 얕은 복사라고 합니다.

(2) 얕은 복사 방법

  • Object.assign()
  • 전개연산자 (...)

4. 깊은 복사

(1) 깊은 복사란

원본과의 참조가 완전히 끊긴 객체를 깊은 복사가 되었다고 합니다.

(2) 깊은 복사 방법

  • 재귀함수를 이용한 복사
  • JSON.stringify()
    JSON.stringify()는 객체를 json 문자열로 변환하는데 이 과정에서 원본 객체와의 참조가 모두 끊어집니다. 객체를 json 문자열로 변환후 JSON.parse()를 이용해 다시 자바스크립트 객체로 만들어주면 깊은 복사가 완료됩니다. 하지만 이 방법은 다른 방법에 비해 아주 느립니다.
  • lodash 라이브러리의 cloneDeep9) 메서드 사용

0개의 댓글