자바스크립트에서 배열을 복사하는 방법은 여러 가지가 있습니다.
복사하려는 배열의 크기와 복사 방식(얕은 복사 또는 깊은 복사)에 따라 다릅니다.
이번 글에서는 자바스크립트에서 배열을 복사하는 다양한 방법을 살펴보겠습니다.
얕은 복사와 깊은 복사
얕은 복사는 배열의 요소가 객체일 경우, 객체의 참조를 복사합니다. 따라서 원본 배열이나 복사된 배열 중 하나를 변경하면, 다른 배열에도 영향을 미치게 됩니다.
깊은 복사는 배열의 모든 수준에서 실제 값을 복사하여, 원본 배열과 복사된 배열이 완전히 독립적으로 동작하도록 만듭니다.
slice() 메서드를 사용한 얕은 복사
slice() 메서드는 배열의 일부를 추출하여 새로운 배열을 생성합니다.
인자를 제공하지 않으면 배열 전체를 복사합니다.
See the Pen Untitled by saladent (@saladent) on CodePen.
스프레드 연산자(...)를 사용한 얕은 복사
스프레드 연산자는 ES6에서 도입된 배열 복사 방법으로, 매우 간단하고 직관적입니다.
See the Pen 얕은복사 - 스프레드 문법 by saladent (@saladent) on CodePen.
Array.from() 메서드를 사용한 얕은 복사
Array.from() 메서드는 유사 배열 객체나 반복 가능한 객체를 새로운 배열로 변환합니다.
See the Pen 얕은복사 - from() by saladent (@saladent) on CodePen.
concat() 메서드를 사용한 얕은 복사
concat() 메서드는 기존 배열을 변경하지 않고, 새로운 배열을 반환합니다.
See the Pen 얕은복사 - concat() by saladent (@saladent) on CodePen.
JSON.parse()와 JSON.stringify()를 사용한 깊은 복사
이 방법은 JSON.parse()와 JSON.stringify()를 사용하여 배열을 깊은 복사합니다.
복사된 배열에 새로운 요소를 추가한 후 원본 배열과 복사된 배열을 출력하는 방법을 보여줍니다.
See the Pen 깊은복사 - JSON.parse()와 JSON.stringify() by saladent (@saladent) on CodePen.
이 코드는 copiedArray에 5를 추가합니다. 하지만 깊은 복사가 이뤄지기 때문에 얕은 복사와 달리 이 작업은 originalArray에는 영향을 미치지 않습니다.
재귀 함수를 사용한 깊은 복사
재귀 함수를 사용하여 배열의 모든 요소를 복사하는 방법입니다. 이 방법은 배열에 복잡한 중첩 구조가 있는 경우 유용합니다.
See the Pen Untitled by saladent (@saladent) on CodePen.
얕은 복사의 장점과 단점
장점
- 빠름: 얕은 복사는 복사 과정이 단순하여 빠릅니다.
- 메모리 절약: 중첩된 객체나 배열은 참조를 공유하기 때문에 메모리 사용이 효율적입니다.
단점
- 부작용 가능성: 중첩된 객체나 배열을 수정하면 원본 객체나 배열에도 영향을 미칠 수 있습니다.
- 데이터 무결성 문제: 원본 데이터와 복사본 데이터의 독립성이 보장되지 않기 때문에 예기치 않은 버그가 발생할 수 있습니다.
깊은복사의 장점과 단점
장점
- 독립성 보장: 원본 데이터와 복사본 데이터가 완전히 독립적이므로 데이터 무결성이 보장됩니다.
- 안전성: 원본 데이터에 영향을 미치지 않고 복사본 데이터를 자유롭게 수정할 수 있습니다.
단점
- 속도 저하: 깊은 복사는 재귀적으로 모든 중첩 구조를 복사하기 때문에 성능이 떨어질 수 있습니다.
- 메모리 사용량 증가: 모든 데이터를 복사하기 때문에 메모리 사용량이 증가합니다.
- 제약사항: JSON.parse()와 JSON.stringify() 방법은 undefined, 함수, 심볼이 포함된 객체를 제대로 처리하지 못합니다.
언제 얕은 복사를 사용하고 언제 깊은 복사를 사용하나요?
얕은 복사와 깊은 복사 모두 장단점이 있습니다.
선택은 사용자의 요구 사항과 데이터 구조의 복잡성에 따라 달라집니다.
얕은 복사는 단순한 데이터 구조와 성능이 중요한 경우 유용하며, 깊은 복사는 데이터 무결성이 중요한 복잡한 데이터 구조에 적합합니다. 필요에 따라 적절한 복사 방식을 선택하여 사용할 수 있습니다.