Shallow copy
- 얕은 복사는 객체내의 객체를 복사할 때 주소값만을 복사하여 객체 내의 객체를 변경했을 경우 원본과 사본이 같이 고쳐지는 복사를 의미한다.
let arr = [1, 2, ["a", "b"]]
let newArr = arr.slice();
arr[0] = "가"
console.log(arr) //[ '가', 2, [ 'a', 'b' ] ]
console.log(newArr) //[ 1, 2, [ 'a', 'b' ] ]
arr[2][0] = 3;
console.log(arr) //[ '가', 2, [ 3, 'b' ] ]
console.log(newArr) //[ 1, 2, [ 3, 'b' ] ]
let obj = {
job: 'manager',
person: {
name: 'hwang',
age: '???'
}
}
let newObj = Object.assign({}, obj)
obj.job = 'singer'
console.log(obj.job) //'singer'
console.log(newObj.job) //'manager'
obj.person.age = 20
console.log(obj.person.age) //20
console.log(newObj.person.age) //20
Deep Copy
- 깊은 복사를 하는 방법은 직접 재귀함수를 사용하여 복사하는 방법과 JSON객체의 메소드를 이용하는 방법이 있다.
- JSON.stringify: JS 오브젝트를 스트링 포맷으로 변환
- JSON.parse: 스트링 포맷을 JS 오브젝트로 변환
- JSON객체의 메소드 방법으로는 함수, Date 객체, 정규표현식 등등의 데이터는 복사되지 않는다.
//재귀함수를 이용한 Deep Copy
let obj = {
name: 'hwnang',
char: {
job: 'swordman',
level: 12,
skill: ''
},
lastName: 'minhwan'
}
function cloneObj(pm){
let newObj = {}
for(let prop in pm){
if(typeof pm[prop] === 'object' && pm[prop] !== null){
newObj[prop] = cloneObj(pm[prop])
}
else {
newObj[prop] = pm[prop]
}
}
return newObj
}
cloneObj(obj)
'학습' 카테고리의 다른 글
compose 추상화 (0) | 2021.08.10 |
---|---|
map, filter, reduce (0) | 2021.08.10 |
구조 분해 할당 (0) | 2021.08.05 |
Spread / Rest 문법 (0) | 2021.08.05 |
Closure (0) | 2021.08.04 |