[Javascript] ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ์–•์€ ๋ณต์‚ฌ, ๊นŠ์€ ๋ณต์‚ฌ
728x90

์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ

๋จผ์ € ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘ ์ฐธ์กฐํ˜•์œผ๋กœ๋Š” ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

  • Object
  • Array
  • ํ•จ์ˆ˜(function)
  • Date
  • ์ •๊ทœํ‘œํ˜„์‹
  • Map, Set ์ž๋ฃŒ ๊ตฌ์กฐ
  • + null๋„ object ํƒ€์ž…!

 

 

์ฐธ์กฐํ˜• ํƒ€์ž…๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.

์‹ค์ œ ๊ฐ์ฒด ๋‚ด ํ”„๋กœํผํ‹ฐ๋“ค์ด ๋‹ด๊ธด ์ฃผ์†Œ ๊ฐ’๋“ค์„ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ์ฃผ์†Œ ๊ฐ’!.. ์„ ๋ณต์‚ฌํ•ด์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐํ˜•์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

1. obj1์„ ์œ„ํ•œ ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ ์•ˆ์˜ ํ”„๋กœํผํ‹ฐ๋“ค์€ ๋˜ ๊ทธ ์•ˆ์—์„œ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ์žˆ๋‹ค. (์œ„์˜ ์ฃผ์†Œ 7103~7104 ๋ถ€๋ถ„)

2. ๋ฐ์ดํ„ฐ ์˜์—ญ ์•ˆ์— ํ”„๋กœํผํ‹ฐ๋“ค์˜ ์ฃผ์†Œ ๊ฐ’์ด ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฐ›๋Š”๋‹ค.

3. obj1์€ 2์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค.

 

๊ฒฐ๊ตญ ๊ธฐ๋ณธํ˜•๊ณผ์˜ ์ฐจ์ด๋Š” ๊ธฐ๋ณธํ˜•์€ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์ œํ•˜๋Š” ๋ฐ˜๋ฉด,

์ฐธ์กฐํ˜•์€ ์ฃผ์†Œ ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Œ ๊ฐ’์„ ๋ณต์ œํ•œ๋‹ค๋Š” ๊ฒƒ!..

 

 

์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ

์–•์€ ๋ณต์‚ฌ

์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ์ฃผ์†Œ ๊ฐ’์— ๋”ฐ๋ผ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ’์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

const obj1 = {
    a: 123,
    b: 'abc',
};

const obj2 = obj1; // obj1์˜ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐ
obj2.a = 456;

์œ„์™€ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ obj1๋„ ๊ฐ’์ด ๋˜‘๊ฐ™์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ์•ผ obj2๋Š” obj1์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋‹ˆ ๋‘ ๊ฐ์ฒด๋Š” ๊ฐ™๋‹ค!...

 

๊ฒฐ๊ตญ obj2์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ฐ”๊พธ์—ˆ์ง€๋งŒ obj1๊นŒ์ง€ ์˜ํ–ฅ์ด ๊ฐ„๋‹ค. ์˜๋„์น˜ ์•Š๊ฒŒ ๊ธฐ์กด ๋ณ€์ˆ˜๊นŒ์ง€ ์ˆ˜์ •์ด ๋˜์–ด๋ฒ„๋ฆฐ ๊ฒƒ.. ๐Ÿ˜‚

์ด๋ ‡๊ฒŒ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์–•์€ ๋ณต์‚ฌ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

๊นŠ์€ ๋ณต์‚ฌ

๊นŠ์€ ๋ณต์‚ฌ๋Š” ์œ„์™€ ๊ฐ™์ด ์ฃผ์†Œ ๊ฐ’๋งŒ ๋ณต์ œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‚ด๋ถ€ ๊ฐ’์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
๊ณ ๋กœ ์›๋ณธ ๊ฐ์ฒด์™€์˜ ์ฐธ์กฐ๊ฐ€ ๋ชจ๋‘ ๋Š์–ด์ง„ ์ƒํƒœ์ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

 

 

๋‚ด๋ถ€ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜.. ์ƒˆ๋กœ์šด ๊ฐ์ฒด ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜ ๋งŒ๋“ค์–ด์„œ ๋ณต์‚ฌํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜? ๐Ÿค” ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ฌด์ˆ˜ํžˆ ๋งŽ์„ ๊ฒฝ์šฐ์—๋Š” ๋‹ต์ด ์—†๋‹ค๋Š” ์ ๊ณผ..
์•„๋ž˜์ฒ˜๋Ÿผ ์ค‘์ฒฉ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ b์™€ c ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์–•์€ ๋ณต์‚ฌ๊ฐ€ ๋œ๋‹ค๋Š” ์ !...

const obj = {
  a: 123,
  b: [1, 2, 3],
  c: {
    name: 'troy',
    age: '20',
  },
};

const copyObject = (target) => {
  const result = {};
  for (const prop in target) {
    result[prop] = target[prop];
  }
  return result;
};

const obj2 = copyObject(obj);
obj2['d'] = 'def';

์Œ, ์–ธ๋œป ๋ณด๊ธฐ์— obj์™€ obj2๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์ธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ฒฐ๊ตญ obj.b์™€ obj2.b๋Š” ๋™์ผํ•œ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™๋‹ค.

 

 

 

๊ทธ๋Ÿผ ๊นŠ์€ ๋ณต์‚ฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ข‹์„๊นŒ?? ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

 

JSON.parse()์™€ JSON.stringify()๋ฅผ ์ด์šฉํ•˜๊ธฐ

JSON ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ object๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ์ด ๊ณผ์ • ์•ˆ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ..

const obj = {
  a: 1,
  b: {
    c: null,
    d: [1, 2],
  },
};

const obj2 = JSON.parse(JSON.stringify(obj));

obj2['c'] = 3;

์œ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‘ ๊ฐœ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์ž„์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

์ข€ ๋” ๋ณต์žกํ•˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

const copyObjectDeep = function (target) {
  let result = {};

  if (typeof target === 'object' && target !== null) {
    for (const prop in target) {
      result[prop] = copyObjectDeep(target[prop]);
    }
  } else {
    result = target;
  }
  return result;
};

const obj = {
  a: 1,
  b: {
    c: null,
    d: [1, 2],
  },
};

const obj2 = copyObjectDeep(obj);
obj2['c'] = 345;

 

์—ญ์‹œ ์œ„์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ!..

 

 

Object.assign() ๋ฉ”์„œ๋“œ์™€ Spread ์—ฐ์‚ฐ์ž๋„ 1 depth ๊นŒ์ง€๋Š” ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๐Ÿ™‚

 

 

 

 

 

 

728x90