[자바 스크립트] 깊은복사 / 얕은복사

김태훈·2022년 10월 22일
0

원시 자료형 (primitive data type)

원시 자료형이랑 컴퓨터에서 기본적으로 제공하는 자료형으로,
JS에서 string,number,boolean,undefined,null 등등이 곧 원시 자료형이다.
이들은 매번 선언할 때마다 고정된 메모리공간에 저장된다.
따라서 값을 복사하여 다른 메모리 주소에 할당한다.
따라서 원시 자료형이 할당 될 때에는 변수에 값 자체가 저장된다.

참조 자료형 (reference data type)

참조 자료형이란 원시 자료형이 아닌 다른 자료형으로,
JS에서 배열, 객체, 함수 가 있다.
이들은 선언할 때, heap의 동적 메모리 공간에 저장이 된다.
그리고 이 변수에 저장되는 값은 곧 이 데이터가 가리키는 주소 공간을 저장하게 된다.
따라서 참조 자료형이 할당 될 때에는 변수에 주소값이 저장된다.

깊은복사 / 얕은복사

원시 자료형의 경우에는

let number = 2;
copied = number;
number = 3;
console.log(number); //3
console.log(copied); //2

처럼 number를 바꿔도 copied에는 그 전에 저장된 값이 그대로 도출되지만, 배열은 다르다.

let arr = [1,2,3];
copied = arr;
arr.push(3);
console.log(arr);
console.log(copied);

arr 배열과 copied 배열은 arr를 바꿔도, copied를 바꿔도 항상 동일하다 (주소를 가지고 있는
reference data type이기 때문이다.

어떻게 해결할 것인가?

깊은 복사는 문제가 되지 않을 것이다.
그렇다면 얕은 복사를 깊은 복사처럼 하는 방법을 알아야 겠다.

  • 스프레드 연산자 (...)
  • Object.assign({})

를 이용하자.

profile
기록하고, 공유합시다

0개의 댓글