๐Ÿ‘€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€์ ์œผ๋กœ ๋ณด๋Š” ๊ธฐ๋ณธํ˜• ์ฐธ์กฐํ˜•

hoheesuยท2024๋…„ 2์›” 7์ผ

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
3/8
post-thumbnail

์šฐ์„  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ’์˜ ํƒ€์ž…์€ ํฌ๊ฒŒ ๊ธฐ๋ณธํ˜•(Primitive Type)๊ณผ ์ฐธ์กฐํ˜•(Reference Type)์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ๊ธฐ๋ณธํ˜•๊ณผ ์ฐธ์กฐํ˜•์˜ ๊ตฌ๋ถ„ ๊ธฐ์ค€์€ ๊ฐ’์˜ ์ €์žฅ๋ฐฉ์‹๊ณผ, ๋ถˆ๋ณ€์„ฑ ์—ฌ๋ถ€์ด๋‹ค.

๐Ÿ’ก ๊ธฐ๋ณธํ˜•๊ณผ ์ฐธ์กฐํ˜•์˜ ๊ตฌ๋ถ„ ๊ธฐ์ค€

  • ๋ณต์ œ์˜ ๋ฐฉ์‹
    - ๊ธฐ๋ณธํ˜• : ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์ œ
    - ์ฐธ์กฐํ˜• : ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Œ๊ฐ’๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌถ์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ณต์ œ
  • ๋ถˆ๋ณ€์„ฑ์˜ ์—ฌ๋ถ€
    - ๊ธฐ๋ณธํ˜• : ๋ถˆ๋ณ€์„ฑ์„ ๋”
    • ์ฐธ์กฐํ˜• : ๋ถˆ๋ณ€์„ฑ์„ ๋„์ง€ ์•Š์Œ

์—ฌ๊ธฐ์„œ ๋ถˆ๋ณ€์„ฑ์„ ๋ˆ๋‹ค๋Š” ๋ง์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ดํ•ด๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

๐Ÿชจ ๋ถˆ๋ณ€์„ฑ

  • ๊ฐ€๋ณ€์„ฑ / ๋ถˆ๋ณ€์„ฑ์„ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ์˜์—ญ์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
  • ์ƒ์ˆ˜ / ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜์˜์—ญ์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๋ถˆ๋ณ€์„ฑ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ์— ๊ด€ํ•ด ์ดํ•ด๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ

  • ๋น„ํŠธ
    - ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„
    - 0๊ณผ 1์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋“ค์ด ๋ชจ์—ฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ์ง€๋Š”๊ฒƒ.
  • ๋ฐ”์ดํŠธ
    - 8๊ฐœ์˜ ๋น„ํŠธ๋ฅผ ๋ฌถ์–ด๋‘” ์ƒˆ๋กœ์šด ๋‹จ์œ„
  • ๋ฉ”๋ชจ๋ฆฌ : byte ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ
    - ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” byte๋‹จ์œ„์˜ ์‹๋ณ„์ž์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ํ†ตํ•ด ์„œ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๐Ÿ“‡ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๋ฐ์ดํ„ฐ ํ• ๋‹น

// ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ํ’€์–ด ์“ด ๋ฐฉ์‹
let str; 
str = 'test';
// ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ๋ถ™์—ฌ ์“ด ๋ฐฉ์‹
let str = 'test';
์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ
1002str / @50025002'test'
10035003
10045004

โ—๏ธโ—๏ธโ—๏ธ์•ž์œผ๋กœ ์ž„์˜๋กœ 1000๋ฒˆ๋Œ€ ์ฃผ์†Œ๋Š” ๋ณ€์ˆ˜์˜ ์˜์—ญ 5000๋ฒˆ๋Œ€์˜ ์ฃผ์†Œ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์ด๋ผ๊ณ  ์„ ์–ธ์„ ํ•ด๋‘๊ฒ ๋‹ค โ—๏ธโ—๏ธโ—๏ธ
๊ฐ’์„ ๋ฐ”๋กœ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
โœ… ์ด๋ฏธ ๋Œ€์ž…ํ•œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ง€๊ฒŒ ๋œ๋‹ค๋ฉด ์ดํ›„ ์ฃผ์†Œ๊ฐ’์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค ๋’ค๋กœ ๋ฏธ๋ค„์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
ex) 1003๋ฒˆ ์ฃผ์†Œ๋ฅผ ์ด๋ฏธ์‚ฌ์šฉ์ค‘์ด๋ผ๊ณ  ํ• ๋•Œ 1002๋ฒˆ ์ฃผ์†Œ์— ๋ฌธ์ž์—ด๋ฐ์ดํ„ฐ ๊นŒ์ง€ ๊ฐ™์ด ๋„ฃ์—ˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธธ์–ด์ ธ์„œ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ ค๋ฉด 1003๋ฒˆ ์ฃผ์†Œ๋Š” 1004๋ฒˆ์œผ๋กœ ... ๋ชจ๋“  ์ฃผ์†Œ๊ฐ€ ๋ฐ€๋ฆฌ๊ฒŒ ๋œ๋‹ค.

โœ… ๋˜ํ•œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•œ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•ด๋ณธ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์ฃผ์†Œ๋Š” ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์ฃผ์†Œ๋งŒ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์œผ๋ฉด ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์ฃผ์†Œ์˜ ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ(๋ฐ”์ดํŠธ)๋ฅผ ๋งŽ์ด ๊ฐ€์ ธ๊ฐ€๊ธฐ ๋•Œ๋ฌธ

๐Ÿ‘€ ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ

์ง€๊ธˆ๊นŒ์ง€๋Š” ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์„ค๋ช…์ด์—ˆ๋‹ค..๐Ÿ˜…

๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์—๋Š” Number / String / Boolean / null / undefined / Symbol ๋“ฑ์ด ์žˆ๋‹ค. ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์—๋Š” Array / Function / Date / RegExp / Map, WeakMap / Set, WeakSet๋“ฑ์ด ์žˆ๋‹ค.

๐Ÿ‘“ ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€์ˆ˜(let)์™€ ์ƒ์ˆ˜(const)๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ โžก๏ธ ๋ณ€์ˆ˜์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ณ€์ˆ˜ ๋ณ€์ˆ˜์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ƒ์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

// 'abc'๋ผ๋Š” ๊ฐ’์ด ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ @5002 ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•˜๊ณ  ์„ ์–ธ
let a = 'abc';
// ์—ฌ๊ธฐ์„œ @5002 ์ฃผ์†Œ์— 'def'๋ผ๋Š” ๊ฐ’์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€ ๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, 
//@5003์— 'abcdef'๋ผ๋Š” ๊ฐ’์ด ์ƒ๊ธฐ๊ณ  
// ๋ณ€์ˆ˜ a๋Š” @5002 โžก๏ธ @5003์ฃผ์†Œ๋กœ ๋ณ€ํ•œ๊ฒƒ์ผ ๋ฟ์ด๋‹ค. ๋ฟ
a = a + 'def'; // a = 'abcdef'
// ์ฆ‰, ๋ณ€์ˆ˜ a๋Š” ๋ถˆ๋ณ€ํ•˜๋‹ค. ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ
// ์ด ๋•Œ, @5002๋Š” ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ์˜ ์ˆ˜๊ฑฐ ๋Œ€์ƒ์ด ๋œ๋‹ค. 

โฌ†๏ธ ์œ„ ์ฝ”๋“œ์˜ ์„ค๋ช…์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ์ฃผ์†Œ์— ์žˆ๋Š” ๊ฐ’์ด ์ง์ ‘์ ์œผ๋กœ ๋ณ€ํ•œ๊ฒƒ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ์ฃผ์†Œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์ฃผ์†Œ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋ณด๋‚ด์ค€๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ a๋Š” ๋ถˆ๋ณ€ํ•œ ๊ฒƒ์ด๋‹ค. โžก๏ธ ๊ทธ๋ ‡๋‹ค๋Š” ๋ง์€ ๋ณ€์ˆ˜ a๋Š” ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ ์ธ๊ฒƒ์ด๋‹ค.

๐Ÿฅฝ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ

let obj1 = {
  a: 1,
  b: 'bbb',
}

โฌ†๏ธ์œ„ ์ฝ”๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๋ณธ๋‹ค๋ฉด โฌ‡๏ธ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ
1002obj1/@7003~@7004500217103a/@5002
10035003'bbb'7104b/@5003
100450047105

๋ฐ์ดํ„ฐ ์ฃผ์†Œ(@5000๋ฒˆ๋Œ€)์—๋Š” ๊ฐ์ฒด์˜ value๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ , Obj1๋ณ„๋„ ์ฃผ์†Œ(@7000๋ฒˆ๋Œ€)์—๋Š” key๊ฐ’๊ณผ value๊ฐ’์ด ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด์˜ key๊ฐ’๊ณผ value๊ฐ’ ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜ ์ฃผ์†Œ(@1000๋ฒˆ๋Œ€)์— ๋„ฃ์–ด์ฃผ๋Š”๊ฒƒ์ด๋‹ค.
๊ธฐํ˜ธ๋กœ @{์•ˆ์— ์žˆ๋Š”๊ฒƒ์€ ๋‹ค๋ฅธ ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’์ด๋ผ๊ณ  ๊ฐ€์ •์„ ํ•ด๋ณด๊ฒ ๋‹ค.}
โžก๏ธ { obj1์‹๋ณ„์ž @{ ๊ฐ์ฒดKey @{ Value }}}
์ด๋Ÿฐ ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค.

obj1.a = 2; // ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด

โฌ†๏ธโฌ†๏ธ์œ„์—์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํ…Œ์ด๋ธ”์—์„œ @5004์— 2๋ผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ๊ทธ์— ๋”ฐ๋ผ @7001๋ฒˆ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ a/@5004๋กœ ๋ณ€๊ฒฝ์ด ๋  ๊ฒƒ์ด๋‹ค.
์—ฌ๊ธฐ์— ์ ์–ด๋‘์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜์—ญ์ธ @7000๋ฒˆ๋Œ€ ์ฃผ์†Œ์— ๋ณ€๊ฒฝ์ด ์ƒ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€ํ•˜์ง€ ์•Š๋‹ค (๊ฐ€๋ณ€ํ•˜๋‹ค). โžก๏ธ ๊ทธ๋ ‡๊ธฐ์— Object๋Š” ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์ธ ๊ฒƒ์ด๋‹ค.

๐Ÿ“š ์ค‘์ฒฉ๊ฐ์ฒด์˜ ํ• ๋‹น

let obj = {
  x: 3,
  arr: [3, 4, 5],
}
์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ์ฃผ์†Œ๋ฐ์ดํ„ฐ
1002obj/@7103~7104500237103x/@500281030/@5002
1003500347104arr/@8103~810581041/@5003
100450045710581052/@5004

์ค‘์ฒฉ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ๊ธฐ์กด ๊ฐ์ฒด์— ํ• ๋‹นํ•˜๋˜ ๋ฐฉ์‹์—์„œ @8000๋ฒˆ๋Œ€(์ž„์˜์˜ ์ฃผ์†Œ)์˜ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ–จ๏ธ ๋ณต์‚ฌ์ดํ›„ ๊ฐ’ ๋ณ€๊ฒฝ

โฌ†๏ธ์œ„ ๊ทธ๋ฆผ์—์„œ ์„ค๋ช… ํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ด ์ƒ์„ฑ๋˜์–ด ๊ฐ ๋ณ€์ˆ˜์— ์˜ํ–ฅ์ด ์—†์ง€๋งŒ, ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌ์‹œ ์„œ๋กœ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์ด ๊ฐ„๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ฅผ ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๊ฒŒ ๋ณต์‚ฌ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์žฌ์„ ์–ธ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

๐Ÿ’ก ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋ณ€๊ฐ’์ด๋ผ๊ณ  ํ•  ๋•Œ์˜ ๊ฐ€๋ณ€์€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ทธ ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์„ฑ๋ฆฝํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ˜ ๏ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด

๐Ÿ’ก ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ฐ€๋ณ€์ด ์„ฑ๋ฆฝํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๊ณ (์ฆ‰, ๋ถˆ๋ณ€) ๋ณต์‚ฌํ•œ ๊ฐ์ฒด์˜ ๊ฐ’๋งŒ ๋ณ€ํ•˜๋„๋ก ๊ตฌํ˜„์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด๋•Œ ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ์˜ ๊ฐœ๋…์ด ์žˆ๋‹ค.

๐Ÿ’ฆ ์–•์€ ๋ณต์‚ฌ

๋‹ค์Œ์€ ์–•์€๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

// copyObj๋ผ๋Š” ํ•จ์ˆ˜์— ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด
let copyObj = function (target) {
  let  result = {};
  // for in์„ ๋Œ๋ฆฐ๋‹ค. ( for in๋ฌธ์€ ๊ฐ์ฒด์— ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ)
  for(const prop in target) {
    // result๊ฐ์ฒด ์•ˆ์— target(๋งค๊ฒŒ๋ณ€์ˆ˜๋กœ ๋‚ด๋ ค์ค€ ๊ฐ์ฒด)์˜ ๊ฐ’๋“ค์„ ์ €์žฅ
    result[prop] = target[prop]
  }
  return result
}

โฌ†๏ธ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์–•์€๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆ๋ณ€๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒ˜์Œ ์ƒ์„ฑํ–ˆ๋˜ obj1 ๊ณผ ์–•์€๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜๋œ obj2 ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ–์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๊ฒƒ์ด๋‹ค. obj2.value๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด obj1 === obj2 ๋ผ๋Š” ์กฐ๊ฑด์—์„œ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์™„๋ฒฝํ•ด๋ณด์ด๋Š” ์–•์€ ๋ณต์‚ฌ์—๋„ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค. ์–•์€๋ณต์‚ฌ๋Š” ๋ง ๊ทธ๋Œ€๋กœ for in์„ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ˆœํ™˜ํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์ฒฉ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ์—๋Š” ๋ถˆ๋ณ€๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ๊ฐ–์ง€ ๋ชปํ•œ๋‹ค.

๐ŸŒŠ ๊นŠ์€ ๋ณต์‚ฌ

๊นŠ์€ ๋ณต์‚ฌ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ๋ฌธ์ œ์ ๋“ค์„ ๋ณด์™„ํ•  ์ˆ˜์žˆ๋„๋ก ์žฌ๊ท€์  ์ˆ˜ํ–‰์„ ํ•˜๋Š”๊ฒƒ์ด๋‹ค.

var copyObjectDeep = function(target) {
	var result = {};
	if (typeof target === 'object' && target !== null) {
      // target์ด ๊ฐ์ฒด์ƒํƒœ๋กœ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
		for (const prop in target) {
          // forin์œผ๋กœ target์„ ์ฐธ์กฐํ•œ๋‹ค.
			result[prop] = copyObjectDeep(target[prop]);
          // copyObjectDeep() ๋กœ ์ฐธ์กฐํ•œ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
          // ์ด๋•Œ, target[prop]์— ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์•„๋ž˜ else๋ฌธ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
		}
	} else {
		result = target;
	}
	return result;
  // ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์ค‘์ฒฉ ๊ฐ์ฒด ๊นŒ์ง€ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋ณต์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
}

๐Ÿ™Œ JSON์„ ์ด์šฉํ•œ ๊นŠ์€๋ณต์‚ฌ

JSON์„ ์ด์šฉํ•˜์—ฌ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ˜… ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์—๋„ ๋ฌธ์ œ๋Š” ์กด์žฌํ•œ๋‹ค. ์ค‘์ฒฉ ๊ฐ์ฒด์—์„œ๋Š” ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ํ• ์ˆ˜ ์—†์œผ๋ฉฐ, ํ•จ์ˆ˜๋‚˜ undefined์™€ ๊ฐ™์€ ์†์„ฑ๊ฐ’์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.
๐Ÿ‘€ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ , ํ•จ์ˆ˜๋‚˜ undefined์™€ ๊ฐ™์€ ์†์„ฑ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค. ๋งŒ์ผ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

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

profile
๐Ÿค”๐Ÿ‘๐Ÿ’ก๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป๐Ÿคฏ๐Ÿ˜‡

0๊ฐœ์˜ ๋Œ“๊ธ€