비개발자, CPO가 되기까지
19.12.22 개발기록 -[Javascript] Nested Object(중첩된 객체)
뚜까망치 루크
2019. 12. 22. 17:47
자자 ~ 오늘 포스팅 내용은 무엇이냐~
Nested Object ! 중첩된 객체 이다 !
이전 포스팅에서 Immutability (불변성)에 대해 이야기 해보았다. 이번 포스팅은 그의 연장선인데,
바로
var o1 = {name: 'kim', score:[1,2]};
|
위 코드와 같이 객체 { } 안에 [ ] 배열이 있는 경우에 객체를 복사하였을 때, 원본은 변화 시키지 않는 방법이다.
1
2
3
4
|
var o1 = {name: 'kim', score:[1,2]};
var o2 = Object.assign({}, o1);
o2.score.push(3);
|
o2 를 Object.assign을 통해 복사 한뒤, score.push(3) 을 하게 되면, o2 내의 score 뿐만 아니라, o1 내의 score 또한 [1, 2, 3] 으로 바뀌게 된다. 이유인즉슨, 전체 객체는 복사하여 새로운 메모리에 할당을 하였지만, score 이라는 배열 객체는 o1, o2 모두 같은 메모리를 할당 받았기 때문이다.
이를 방지하기 위해서는, concat() 을 이용하면 된다 !
concat() 은 Object.assign() 과 마찬가지로, 데이터를 복사해서 새로운 위치에 넣어주는 역할을 한다. -> 배열일 경우 !
그리고 그 후에, o2.score.push(3)을 해주면,
1
2
3
4
|
var o1 = {name: 'kim', score:[1,2]};
var o2 = Object.assign({}, o1);
o2.score = o2.score.concat();
o2.score.push(3);
|
o1.score = [1, 2] 이며, o2.score = [1, 2, 3] 이 된다 !
오늘도 하나 배웠다 ! 굳 !
이 포스팅을 보시는 분 중 제가 틀린 부분, 잘못 이해한 부분이 있어 알려주실만한 내용이 있다면 언제든 편하게 댓글 남겨주세요 :) 감사합니다 !
728x90
반응형