본문 바로가기

programming/Javascript

얕은복사 & 깊은복사

데이터타입

 

원시값

String, Number, Boolean, Null, Undefined

-> 자동 깊은 복사, 다른 메모리에 값 자체를 할당

 

참조값

Object, Symbol

-> 얕은 복사, 가리키는 주소를 복사

 

얕은 복사

객체를 가리키는 주소를 같이쓰는것

바꾸면 같이 따라서 바뀌어 버린다

 

깊은 복사

  • spread 연산자 사용 (1 depth 까지만)
  • Object.assign() 메소드 사용 (1 depth 까지만)

 

완벽한 깊은 복사 방법

  • 재귀적으로 깊은 복사 수행
  • Lodash의 cloneDeep 함수 사용 (라이브러리)
  • JSON.parse()와 JSON.Stringify() 함수 사용
    • JSON.stringify()는 객체를 json문자열로 변환한다. 이 과정에서 원본객체와 참조가 모두 끊어진다.
    • JSON.stringify()로 관계를 끊어버리고, 다시 JSON.parse()하여 객체형태로 만든다.
    • 단점 ; 느림
const obj = {
  a: 1,
  b: {
    c: 2,
  },
};

const copiedObj = JSON.parse(JSON.stringify(obj));

copiedObj.b.c = 3

obj.b.c === copiedObj.b.c //false