Deep Clone
Deep Clone - Explanation
Problem Summary
Write a function that creates a deep clone of an object.
Go to Problem →Detailed Explanation
이 문제는 **얕은 복사 vs 깊은 복사**의 차이를 이해하고, 재귀를 통한 깊은 복사를 구현합니다. **얕은 복사(Shallow Copy)의 문제** `const copy = {...obj}`는 1단계만 복사합니다: ```javascript const original = { a: 1, b: { c: 2 } }; const shallow = {...original}; shallow.b.c = 99; // original.b.c도 99로 변경됨! ``` **깊은 복사(Deep Copy)가 필요한 이유** 중첩된 객체까지 완전히 새로운 복사본을 만들어 원본과 완전히 독립적으로 만들어야 합니다. **재귀적 접근법** 1. null이거나 객체가 아니면 → 그대로 반환 (기저 조건) 2. 배열이면 → 각 요소를 재귀적으로 복사 3. 객체이면 → 각 속성을 재귀적으로 복사 **{ a: 1, b: { c: 2 } } 처리 과정** 1. 객체이므로 새 객체 생성 2. a: 1 → 원시값이므로 그대로 복사 3. b: { c: 2 } → 객체이므로 재귀 호출 - c: 2 → 원시값이므로 그대로 복사 4. 결과: 완전히 새로운 객체 **JSON 방식의 한계** `JSON.parse(JSON.stringify(obj))`는 간단하지만: - 함수, undefined, Symbol 복사 불가 - Date가 문자열로 변환됨 - 순환 참조 처리 불가
Solution Code
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(item => deepClone(item));
}
const cloned = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
cloned[key] = deepClone(obj[key]);
}
}
return cloned;
}Key Concepts from This Problem
Common Mistakes
Hints
Complexity Analysis
Time Complexity
O(n)
Grows linearly with input size
Space Complexity
O(n)
Uses memory proportional to input size