프로그래밍 언어에서 복사에는 깊은 복사(deep-copy)
와 얕은 복사(shallow-copy)
두 종류가 있다.
깊은 복사
는 대상 변수값이 바뀔 때 원본 변숫값은 유지된다. 아래 코드는 깊은 복사
의 예이다.
let original = 1
let copied = original
copied += 2
console.log(original, copied) // 1 3
타입 스크립트에서는
number
와boolean
타입은 깊은 복사 형태로,객체
와배열
은 얕은 복사 방식으로 동작한다.
아래 코드를 실행해보면 배열은 얕은 복사
로 동작하며, 원본 배열이 수정되어 있는 것을 확인할 수 있다.
const originalArray = [5, 3, 9, 7]
const shallowCopiedArray = originalArray
shallowCopiedArray[0] = 0
console.log(originalArray, shallowCopiedArray) // [0, 3, 9, 7] [0, 3, 9, 7]
전개 연산자를 사용하여 배열을 복사하면 깊은 복사
를 할 수 있다.
const oArray = [1, 2, 3, 4]
const deepCopiedArray = [...oArray]
deepCopiedArray[0] = 0
console.log(oArray, deepCopiedArray) // [1, 2, 3, 4] [0, 2, 3, 4]
number, boolean, 전개 연산자 -> 깊은 복사
객체, 배열 -> 얕은 복사