프로그래밍언어/Javascript & Typescript
Javascript 객체 복사(얕은 복사, 깊은 복사)하는 방법
D.Y
2019. 12. 15. 13:31
반응형
안녕하세요.
오늘은 Javascript에서 객체를 복사하는 방법에 대해서 알아보겠습니다.
객체를 복사하는 방법에는 얕은 복사 방법이있고 깊은 복사 방법이 있습니다.
얕은 복사와 깊은 복사
얕은 복사란, 객체의 첫 번째 부분만 복사하는 것을 의미합니다.
Object의 내장객체인 assign() 함수를 사용하여 구현합니다.
깊은 복사란, nested한 객체의 모든 하위 객체까지 복사하는 것을 말합니다.
JSON.parse()와 JSON.stringify() 함수를 사용하여 구현합니다.
코드
/** * 얕은 복사 * * @param {*} obj */ function shallowObjectCopy(obj) { let copyObj = {}; Object.assign(copyObj, obj) return copyObj; } /** * 깊은 복사 * * @param {*} obj */ function deepObjectCopy(obj) { return JSON.parse(JSON.stringify(obj)); } let user = { name: "이두영", age: 30, etc: { nickname: "dylee", height: "190" } }; let shallow = shallowObjectCopy(user); let deep = deepObjectCopy(user); console.log('shallow: ', shallow); //expected output: user console.log('deep: ', deep); //expected output: user // 원본 객체의 nickname 변경 user.etc.nickname = "mango"; /** * expected output: * { * name: "이두영", * age: 30, * etc: { * nickname: "mango", * height: "190" * } * } */ console.log('user: ', user); //expected output: {... nickname: mango ...}; /** * expected output: * { * name: "이두영", * age: 30, * etc: { * nickname: "mango", * height: "190" * } * } */ console.log('shallow: ', shallow); /** * expected output: * { * name: "이두영", * age: 30, * etc: { * nickname: "dylee", * height: "190" * } * } */ console.log('deep: ', deep);
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
반응형