TypeScript 얕은 복사와 깊은 복사
TypeScript에서의 복사(Copy) 개념
복사 (Copying)
프로그래밍에서 복사에는 크게 두 가지 방식이 있다.
- 깊은 복사(Deep Copy)
- 얕은 복사(Shallow Copy)
깊은 복사 (Deep Copy)
- 깊은 복사는 복사한 값이 바뀌더라도 원본 값은 영향을 받지 않는 복사 방식이다
- TypeScript에서는 **원시 타입(primitive type)**인
number
,boolean
은 기본적으로 깊은 복사 방식으로 동작한다.
let original = 1;
let copied = original;
copied += 2;
console.log(original, copied); // 1 3
원본
original
은 변하지 않고,copied
만 변경된다.
얕은 복사 (Shallow Copy)
- 얕은 복사는 복사본과 원본이 같은 참조(reference)를 공유하는 복사 방식이다.
- TypeScript에서 **객체(Object)와 배열(Array)**는 기본적으로 얕은 복사 방식으로 동작한다.
const originalArray = [5, 3, 9, 7];
const shallowCopiedArray = originalArray;
shallowCopiedArray[0] = 0;
console.log(originalArray, shallowCopiedArray);
// [0, 3, 9, 7] [0, 3, 9, 7]
배열
originalArray
가shallowCopiedArray
와 같은 참조를 공유하기 때문에, 하나를 수정하면 다른 하나도 영향을 받는다.
전개 연산자(…)를 활용한 복사
- **전개 연산자(
...
)**를 사용하면 1차원 배열에 한해 깊은 복사처럼 사용할 수 있다.
const oArray = [1, 2, 3, 4];
const deepCopiedArray = [...oArray];
deepCopiedArray[0] = 0;
console.log(oArray, deepCopiedArray);
// [1, 2, 3, 4] [0, 2, 3, 4]
원본 배열은 그대로 유지되고, 복사본만 변경된다.
주의: 객체가 중첩된 배열이나 중첩 객체까지 완전히 복사하려면 전개 연산자만으로는 깊은 복사가 되지 않다.
이 경우JSON.parse(JSON.stringify(obj))
등을 사용한다.
정리
타입/방법 | 복사 방식 | 특징 |
---|---|---|
number, boolean | 깊은 복사 | 원본과 복사본 독립 |
객체(Object), 배열(Arra) | 얕은 복사 | 원본과 복사본 참조 공유 |
전개 연산자 ... |
1차원 깊은 복사 | 1차원 배열/객체에 대해 원본 보존 |
최종 수정 : 2025-08-16