얕은 복사는 중첩된 객체를 얕은 복사하면 문제가 있었다. 관련하여 게시물참조 https://gamunbidev.tistory.com/54
그런 문제를 해결하는 것이 깊은 복사다. 깊은 복사를 하면 복사당한 객체나 복사로 생긴 객체 하나를 수정하면 그 건드린 객체만 바뀐다. (얕은 복사에서는 하나를 수정하면 둘다 바뀌는 문제가 있었다.)
여러 말 할 필요 없이 코드를 보자.
var user = {
name: 'wonjang',
urls: {
portfolio: 'http://github.com/abc',
blog: 'http://blog.com',
facebook: 'http://facebook.com/abc',
},
arr: ['a', 'b']
};
// 깊은 복사
var copyObjectDeep = function (target) {
var result = {};
if (typeof target === 'object' && target !== null){
// 이 if 부분이 중요하다. 이게 없으면 재귀함수이므로 무한반복 오류가 날 것이다.
// object가 아닌 파라미터를 받으면 else 구문으로 빠지기 때문에 함수가 끝날 수 있다.
for (var prop in target) {
result[prop] = copyObjectDeep(target[prop]);
// 재귀함수다. target[prop] 으로 target 객체 내의 또다른 객체를 또다시 함수에 넣어 실행한다.
}
} else {
result = target;
}
return result;
}
user2 = copyObjectDeep(user)
user2.urls.portfolio = 'http://portfolio.com'
console.log(user)
console.log(user2)
아래 코드로 user2 를 수정했을 때 user2 의 내용만 바뀌는 것을 콘솔에서 확인할 수 있다.
user2.urls.portfolio = 'http://portfolio.com'
'자바스크립트 리뷰' 카테고리의 다른 글
getter와 setter 간단명료 정리! (0) | 2023.04.30 |
---|---|
얕은 복사의 문제점: 중첩된 객체를 복사하면 복사당한 객체는 복사로 생겨난 객체와 동시에 수정된다. [JS문법 종합반 3주차 - 1] (0) | 2023.04.12 |
중첩 데이터의 메모리 저장방식 [JS문법 종합반 3주차 ] (0) | 2023.04.11 |
메모리: 참조형 데이터는 가변하다. [ JS문법 종합반 3주차 -1] (0) | 2023.04.11 |
메모리: 변수와 상수 그리고 불변하다와 불변하지 않다. [ JS문법 종합반 3주차] (0) | 2023.04.11 |