본문 바로가기
비개발자, CPO가 되기까지

19.12.22 개발기록 -[Javascript] Nested Object(중첩된 객체)

by 뚜까망치 루크 2019. 12. 22.

자자 ~ 오늘 포스팅 내용은 무엇이냐~

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
반응형

댓글