Js object ๊นŠ์€ ๋ณต์‚ฌ - Js object gip-eun bogsa

๐Ÿ’ก ์–•์€ ๋ณต์‚ฌ(shallow copy) vs ๊นŠ์€ ๋ณต์‚ฌ(deep copy)

โ—๏ธ์–•์€ ๋ณต์‚ฌ(shallow copy)๋ž€?

const obj1 = { a: 1, b: 2};
const obj2 = obj1;

console.log( obj1 === obj2 ); // true
  • ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋Œ€์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์ฐธ์กฐ์— ์˜ํ•œ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ๋‘˜์€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ(์ฃผ์†Œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์ด๊ฒƒ์ด ์–•์€ ๋ณต์‚ฌ์ด๋‹ค.
const obj1 = { a:1, b:2 };
const obj2 = obj1;

obj2.a = 100;

console.log( obj1.a ); // 100
  • ์œ„ ๋‘ ๊ฐ์ฒด๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ(์ฃผ์†Œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๊ทธ๋ž˜์„œ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋•Œ๋ฌธ์— obj2์˜ property๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , obj1๋ฅผ ์ถœ๋ ฅํ•ด๋„ obj2 ๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค.

โ—๏ธ๊นŠ์€ ๋ณต์‚ฌ(deep copy)๋ž€?

์–‡์€ ๋ณต์‚ฌ ์ฒ˜๋Ÿผ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์•„์˜ˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์•ˆ ์†์„ฑ(property)๋งŒ ๋ณต์‚ฌ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„๊นŒ?

๐Ÿ‘‰ ๋ฐฉ๋ฒ• 1. โ€ฆ(spread) ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•œ ๋ณต์‚ฌ (๊ณผ์—ฐ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋ ๊นŒ?)

const obj1 = { a:1, b:2 };
const obj2 = { ...obj };

obj2.a = 100;

console.log( obj1 === obj2 ) // false
console.log( obj1.a ) // 1
  • ...(spread) ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด { }์•ˆ์— obj1์˜ ์†์„ฑ์„ ๋ณต์‚ฌํ•˜์—ฌ obj2์— ํ• ๋‹นํ•˜์˜€๋‹ค.
  • ์ด์ œ obj1๊ณผ obj2๋Š” ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ฒŒ๋˜์—ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ๋”ฑ, 1 depth ๊นŒ์ง€๋งŒ)

๐Ÿ‘‰ ๋ฐฉ๋ฒ• 2. Object.assign() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•œ ๋ณต์‚ฌ (๊ณผ์—ฐ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋ ๊นŒ?)

Js object ๊นŠ์€ ๋ณต์‚ฌ - Js object gip-eun bogsa

Object.assign() - JavaScript | MDN

Object.assign() ๋ฉ”์†Œ๋“œ๋Š” ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถœ์ฒ˜ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋Œ€์ƒ ๊ฐ์ฒด๋กœ ์†์„ฑ์„ ๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

  • ๋จผ์ € Object.assign() ๋ฉ”์†Œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์€ MDN์„ ์ฐธ๊ณ ํ•œ๋‹ค.
const obj1 = { a:1, b:2 };
const obj2 = Object.assign({}, obj1);

obj2.a = 100;

console.log( obj1 === obj2 ) // false
console.log( obj1.a ) // 1
  • Object.assign() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋นˆ { } ๊ฐ์ฒด๋ฅผ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ obj1 ๋„ฃ๊ณ  obj2 ์— ํ• ๋‹นํ•˜์˜€๋‹ค.
  • ์ด์ œ obj1๊ณผ obj2๋Š” ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ฒŒ๋˜์—ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ๋”ฑ, 1 depth ๊นŒ์ง€๋งŒ)

โ—๏ธ์ฃผ์˜, ๊นŠ์€ ๋ณต์‚ฌ์˜ ํ•จ์ •

๐Ÿ‘‰ MDN์˜ ์ „๊ฐœ ๊ตฌ๋ฌธ

์ฐธ๊ณ : Spread ๋ฌธ๋ฒ•์€ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•  ๋•Œ 1 ๋ ˆ๋ฒจ ๊นŠ์ด์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๋Š”๊ฒƒ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Object.assign() ๊ณผ ์ „๊ฐœ ๊ตฌ๋ฌธ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค)

  • Object.assign() ๋ฉ”์†Œ๋“œ๋„ spread ์—ฐ์‚ฐ์ž ๋‘˜ ๋‹ค ์™„๋ฒฝํ•œ Deep copy ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๊ณ  ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๊ฑด ์•„๋‹ˆ๋‹ค.
  • 1 depth ๊นŒ์ง€๋Š” ํ™•์‹คํ•˜๊ฒŒ Deep copy.
  • 2 depth ์ด์ƒ์ด๋ฉด Shallow copy.

๐Ÿ‘‰ โ€ฆ(spread) ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด depth 2๊นŒ์ง€ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

const obj1 = { a: { b:1, c:1 }, d: 2};
const obj2 = { ...obj1, a:{ ...obj1.a } };

obj1.a.b = 100;

console.log(obj1 === obj2) // false
console.log(obj2.a.b) // 1

โ—๏ธ์™„๋ฒฝํ•œ Deep copy๋ฅผ ์œ„ํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

  • ์žฌ๊ท€์ ์œผ๋กœ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰
  • Lodash์˜ cloneDeep ํ•จ์ˆ˜ ์‚ฌ์šฉ
  • JSON.parse()์™€ JSON.stringify()ํ•จ์ˆ˜ ์‚ฌ์šฉ

์™„๋ฒฝํ•œ Deep copy ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ปจํ…์ธ  ์ค€๋น„์ค‘..!


Reference

์ฐธ๊ณ  : [2020.04.26] Javascript ๊นŠ์€ ๋ณต์‚ฌ์˜ ํ•จ์ •โ€ฆ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๋‹ค ๋’คํ†ต์ˆ˜ ๋งž์•˜๋‹คโ€ฆ

์ฐธ๊ณ  : ๊ฐ์ฒด์˜ ์–•์€ ๋ณต์‚ฌ vs ๊นŠ์€ ๋ณต์‚ฌ

์ฐธ๊ณ  : [JavaScript] ์–•์€ ๋ณต์‚ฌ(Shallow Copy)์™€ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)

์ฐธ๊ณ  : ์–•์€ ๋ณต์‚ฌ(shallow copy) vs ๊นŠ์€ ๋ณต์‚ฌ(deep copy)

์ฐธ๊ณ  : ๐Ÿฏ ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ โ€“ 01 ๋ฐ์ดํ„ฐ ํƒ€์ž…

์ฐธ๊ณ  : Copying Objects in JavaScript | DigitalOcean

Js object ๊นŠ์€ ๋ณต์‚ฌ - Js object gip-eun bogsa

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘, ๋‚ด๊ฒŒ ์—„์ฒญ๋‚˜๊ฒŒ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ์•ˆ๊ฒจ์ค€ ์š”์†Œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

Javascript์˜ ๊นŠ์€ ๋ณต์‚ฌ์˜ ํ•จ์ •..

์šฐ์„  ์ด ๊นŠ์€ ๋ณต์‚ฌ์˜ ํ•จ์ •์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ, Object ๋ณต์‚ฌ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์–•์€ ๋ณต์‚ฌ(Shallow copy)

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋“ฏ์ด, ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด call by reference (๋ฐ์ดํ„ฐ ๋ณต์‚ฌ๊ฐ€ ์•„๋‹Œ ์ฐธ์กฐ)๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋˜์–ด, ํ•œ ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค.

const person1 = {name:'inyong'};

const person2 = person1;

person1.name = 'jung';

// result

person2.name // 'jung'

person1 === person2; // true - ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋‘ ๋ณ€์ˆ˜

๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜ ๋” ์ƒ์„ฑ๋œ ๊ฒƒ์ด ์•„๋‹Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋ผ์„œ, ๊ฒฐ๊ตญ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ(Depth copy)

ํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ณต์œ ๊ฐ€ ์•„๋‹Œ, ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ์˜ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜์—ฌ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿด ๋•Œ ์šฐ๋ฆฌ๋Š” '๊นŠ์€ ๋ณต์‚ฌ'๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค.

const person1 = { name: "inyong" };

const person2 = Object.assign({}, person1);

person1.name = "jung";

// result

person2.name // 'inyong' - ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ, person2์˜ ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ.

person1 === person2 // false - ํ˜•ํƒœ๋งŒ ๊ฐ™๊ณ , ๊ฐ์ž ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค.

๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ, ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์ด ์—†๊ฒŒ ๋œ๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ(Depth copy)๋ฅผ ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•

Object.assign()

Object.assign()์€ ES6์ธ๊ฐ€ ES7์ธ๊ฐ€...Object ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

const originObj = {a:1};

const newObj = Object.assign({}, originObj); // ๋นˆ Object์— originObj๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ฐ˜ํ™˜.

// result

newObj // {a:1} 

originObj === newObj // false

๋นˆ Object์—๋‹ค๊ฐ€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ ค๋Š” Object๋ฅผ ๋ณ‘ํ•ฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ˜•ํƒœ๋Š” originObj์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋นˆ Object์™€ originObj๊ฐ€ ๋ณ‘ํ•ฉ๋œ ์ƒˆ๋กœ์šด Object๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

์ „๊ฐœ ์—ฐ์‚ฐ์ž (Spread Operation)

ES6์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ Javascript ๋ฌธ๋ฒ•์ด๋‹ค. 

const Obj1 = {a:1, b:2};

const Obj2 = {c:3};

const Obj3 = {...Obj1, ...Obj2};

// result

Obj3 // {a:1, b:2, c:3}

...(์ฉœ์ฉœ์ฉœ)์„ ์ด์šฉํ•˜์—ฌ, ๋ฐฐ์—ด์ด๋‚˜ Object ํ˜•ํƒœ์˜ ๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์–ด์„œ(?) ์‚ฌ์šฉํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค. 

Object ๋ฟ ์•„๋‹ˆ๋ผ, ๋ฐฐ์—ด๋„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

const Obj1 = {a:1, b:2};

const Obj2 = {...Obj1};

// result

Obj2 // {a:1, b:2}

Obj1 === Obj2 // false

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์˜จ์ „ํžˆ ๋ฏฟ๊ณ  ์‚ฌ์šฉํ•˜๋‹ค๊ฐ„ ๋’คํ†ต์ˆ˜ ๋งž๋Š”๋‹ค...

์™œ๋ƒํ•˜๋ฉด, ์ด ๊นŠ์€ ๋ณต์‚ฌ๋Š” ํ˜„์žฌ์˜ Depth ์ด์ƒ์œผ๋กœ๋Š” ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ(Depth copy)์˜ ํ•จ์ •

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด์„œ ๋ณด๋„๋ก ํ•˜์ž.

const Obj1 = { a: { b: 1 } };

const Obj2 = { ...Obj1 };

// result

Obj2 // { a: { b: 1 } }

Obj1 === Obj2 // false

Depth๊ฐ€ 2์ธ Object๋ฅผ ์ „๊ฐœ์—ฐ์‚ฌ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ Obj2 ๋ณ€์ˆ˜์— ํ• ๋‹นํ–ˆ๋‹ค. 

ํ™•์ธํ•ด๋ณด๋ฉด Obj1๊ณผ Obj2๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜‘๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  === ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ํ™•์ธํ•ด๋ณด๋ฉด, ๊ฐ์ž ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋กœ ์ œ๋Œ€๋กœ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋œ ๊ฒƒ์€ ์ œ์ผ ๋ฐ”๊นฅ์˜ Depth๋ฟ์ด๋‹ค.

const Obj1 = { a: { b: 1 } };

const Obj2 = { ...Obj1 };

// result

Obj2 // { a: { b: 1 } }

Obj1 === Obj2 // false

Obj1.a === Obj2.a // true...!!

๋‘ ๋ฒˆ์งธ Depth ์ด์ƒ์˜ ์š”์†Œ๋“ค์€ ์ฐธ์กฐ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š”... ์ฆ‰, ์–•์€ ๋ณต์‚ฌ(Shallow copy)๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
(Object.assign()์„ ์ด์šฉํ•ด๋„ ๋™์ผ)

์™„๋ฒฝํ•œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์žฌ๊ท€์ ์œผ๋กœ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰

๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ ค๋Š” ํ˜•ํƒœ์— ๋งž๊ฒŒ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ์—ฌ๊ฐ„ ๊ท€์ฐฎ์€ ์ผ์ด ์•„๋‹ˆ๋‹ค...

์‚ฌ์šฉํ•˜๋Š” Object์˜ Depth๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก Time Complexity(์‹œ๊ฐ„ ๋ณต์žก๋„)๋„ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

Lodash์˜ cloneDeep ํ•จ์ˆ˜ ์‚ฌ์šฉ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ ์ฐจํ•จ์ˆ˜ ์ง‘ํ•ฉ ๋ฐ ํ•จ์ˆ˜ํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Lodash์˜ cloneDeep ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์™„๋ฒฝํ•˜๊ฒŒ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

JSON.parse()์™€ JSON.stringify()ํ•จ์ˆ˜ ์‚ฌ์šฉ

JSON.stringify ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ, Object ์ „์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ํ›„, ๋‹ค์‹œ JSON.parse ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ Object ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ˆœ๊ฐ„ ์ฐธ์กฐ ๊ฐ’์ด ๋Š๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Object๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ•˜์ง€๋งŒ JSON ํ•จ์ˆ˜๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์žก์•„๋จน๋Š” ํ•จ์ˆ˜์ธ ๋งŒํผ, ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.


๋‚˜๋Š” ์ด ํ•จ์ •์œผ๋กœ ์ธํ•ด, ๋ฐ˜๋‚˜์ ˆ์ด๋ž€ ์‹œ๊ฐ„์„ ํ—ˆํ™ฉ ์—†์ด ๋ฒ„๋ฆฌ๊ณ  ๋ง์•˜๋‹ค...

๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ๋งˆ์Œ๋Œ€๋กœ ๋ณ€๊ฒฝ์ด ๋˜์–ด ์žˆ๊ณ , ๊ทธ ์›์ธ์€ ๋‹น์ตœ ์ฐพ์•„๋ด๋„ ์•Œ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค.

์ด ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ๊ตณ๊ฒŒ ๋ฏฟ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—...