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

modoleeยท2020๋…„ 8์›” 23์ผ
8
post-thumbnail

๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ข…๋ฅ˜

๊ธฐ๋ณธํ˜• (์›์‹œํ˜•, Primitive type)

์ข…๋ฅ˜

  • ์ˆซ์ž(Number)
  • ๋ฌธ์ž์—ด(String)
  • ๋ถˆ๋ฆฌ์–ธ(Boolean)
  • Null
  • Undefined
  • Symbol (ES6์— ์ถ”๊ฐ€ ๋จ)

ํŠน์ง•

  • ํ• ๋‹น์ด๋‚˜ ์—ฐ์‚ฐ ์‹œ ๋ณต์ œ
  • ๊ฐ’์ด ๋‹ด๊ธด ์ฃผ์†Ÿ๊ฐ’์„ ๋ณต์ œ
  • ๋ถˆ๋ณ€์„ฑ(Immutability)์„ ๋”

์ฐธ์กฐํ˜• (Reference type)

์ข…๋ฅ˜

  • ๊ฐ์ฒด(Object)
    • ๋ฐฐ์—ด(Array)
    • ํ•จ์ˆ˜(Function)
    • ๋‚ ์งœ(Date)
    • ์ •๊ทœ์‹(RegExp)
    • Map, WeakMap (ES6์— ์ถ”๊ฐ€ ๋จ)
    • Set, WeakSet (ES6์— ์ถ”๊ฐ€ ๋จ)

ํŠน์ง•

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

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ด€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹

๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ

  • C/C++, Java ๋“ฑ์˜ ์ •์ • ํƒ€์ž… ์–ธ์–ด
    • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ–ˆ๋˜ ์‹œ์ ˆ
    • ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ํƒ€์ž…๋ณ„๋กœ ํ• ๋‹นํ•  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ 2 Bytes, 4 Bytes ๋“ฑ์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ •ํ•ด ๋†“์Œ
    • ํ—ˆ์šฉ ๋ฉ”๋ชจ๋ฆฌ ์ด์ƒ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๊ฐ’์ด ์ €์žฅ๋จ
    • ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ํฐ ๋ฐ์ดํ„ฐ ํ˜•์œผ๋กœ ๋ณ€ํ™˜์ด ํ•„์š”
      • C์˜ ๊ฒฝ์šฐ ๋™์ ์ธ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด ์ €์žฅ์„ ์œ„ํ•ด์„  malloc, calloc๊ณผ ๊ฐ™์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญ ๊ธธ์ด ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์‚ฌ์šฉํ•จ. ๋งŒ์•ฝ ์ดํ›„์— ๋” ๋งŽ์€ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ realloc์„ ํ†ตํ•ด์„œ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์Œ
  • JavaScript
    • ๊ณผ๊ฑฐ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ์›”๋“ฑํžˆ ์ปค์ง„ ์ƒํ™ฉ์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์••๋ฐ•์—์„œ ์ž์œ ๋กœ์›Œ์ง
    • ์• ์ดˆ์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ข€ ๋” ๋„‰๋„‰ํ•˜๊ฒŒ ํ• ๋‹น
    • ์ˆซ์ž์˜ ๊ฒฝ์šฐ ์ •์ˆ˜ํ˜•์ธ์ง€ ๋ถ€๋™์†Œ์ˆ˜ํ˜•์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  8 Bytes๋ฅผ ํ• ๋‹น
    • ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜• ๋ณ€ํ™˜์„ ๊ฑฑ์ •ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ํ›จ์”ฌ ๋œ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
      • ์ถฉ๋ถ„ํžˆ ๋„‰๋„‰ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์—๋„ ๋ธ”๋ก์ฒด์ธ์˜ ํ† ํฐ์„ ๋‹ค๋ฃฐ ๋•Œ์™€ ๊ฐ™์ด ๋” ํฐ ์ˆซ์ž๋ฅผ ๋‹ค๋ฃฐ ๋•Œ์—๋Š” BigNumber, BigInt(ES2020์—์„œ ์ถ”๊ฐ€)์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํ˜•์„ ์ด์šฉํ•˜์—ฌ์•ผ ํ•จ

์‹๋ณ„์ž์™€ ๋ณ€์ˆ˜

  • ๋ณ€์ˆ˜์™€ ์‹๋ณ„์ž๋ฅผ ํ˜ผ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋ฌด์—‡์„ ๋งํ•˜๊ณ ์ž ํ•˜๋Š”์ง€ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•˜์ง€๋งŒ ๋‘˜์˜ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Œ

๋ณ€์ˆ˜ (Variable)

  • ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ (์ˆซ์ž, ๋ฌธ์ž์—ด, ๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ...)

์‹๋ณ„์ž (Identifier)

  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„
  • ๋ณ€์ˆ˜๋ช…

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

๋ณ€์ˆ˜ ์„ ์–ธ

์ฝ”๋“œ ์˜ˆ์‹œ

let a;
  • a ๋ผ๋Š” ์‹๋ณ„์ž๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธธ ๊ณต๊ฐ„์„ ๋งŒ๋“ ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ์ž„์˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 1003 ๋ฒˆ์ง€์— a ๋ผ๋Š” ์ด๋ฆ„(์‹๋ณ„์ž)์„ ๊ฐ–๋Š” ๊ณต๊ฐ„์ด ํ• ๋‹น ๋จ

๋ฐ์ดํ„ฐ ํ• ๋‹น

์ฝ”๋“œ ์˜ˆ์‹œ

let a; // 1-1. ๋ณ€์ˆ˜ ์„ ์–ธ
a = 'abc'; // 1-2. ๋ฐ์ดํ„ฐ ํ• ๋‹น

let a = 'abc'; // 2. ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋ฐ์ดํ„ฐ ํ• ๋‹น
  • 1๋ฒˆ ์ฒ˜๋Ÿผ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ ์„œ ํ•˜๋Š” ๊ฒƒ๊ณผ 2๋ฒˆ ์ฒ˜๋Ÿผ ๋™์‹œ์— ํ•˜๋Š” ๊ฒƒ ๋ชจ๋‘ JavaScript ์—”์ง„์—์„œ ํ•˜๋Š” ๋™์ž‘์€ ๊ฐ™์Œ
    • ๋ณ€์ˆ˜ a์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    • ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐพ๊ธฐ
    • ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์— 'abc' ๋ฅผ ์ €์žฅ
  • ์œ„์˜ ๊ณผ์ • ์ฒ˜๋Ÿผ ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋Š” ํ•ด๋‹น ์œ„์น˜(a)์˜ ๊ฐ’์— ์ง์ ‘ ๋ฐ์ดํ„ฐ('abc')๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • @5004 ๋ฒˆ์ง€์— 'abc' ๊ฐ’์„ ์ €์žฅ
  • ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐพ๊ธฐ(@1003)
  • ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์— 'abc'๊ฐ€ ์ €์žฅ ๋œ ์ฃผ์†Œ(@5004)๋ฅผ ์ €์žฅ

๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ ๋œ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์ด์œ 

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

๋ฐ์ดํ„ฐ ๋ณ€ํ™˜

์ฝ”๋“œ ์˜ˆ์‹œ

let a = 'abc';
a = 'abcdef';
  • ๋ณ€์ˆ˜ a๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฌธ์ž์—ด 'abc'๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ €์žฅ
  • ๋ฉ”๋ชจ๋ฆฌ์— 'abcdef'๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์— ๋ฎ์–ด ์”Œ์›€

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • @5005๋ฒˆ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์— 'abcdef'๋ฅผ ์ €์žฅ
  • ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐพ๊ธฐ (@1003)
  • ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์„ @5005๋กœ ๊ต์ฒด

๋ณ€์ˆ˜ ์˜์—ญ๊ณผ ๋ฐ์ดํ„ฐ ์˜์—ญ ๋ถ„๋ฆฌ์˜ ์žฅ์ 

  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ์˜ˆ์‹œ : 500๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ชจ๋“  ๋ณ€์ˆ˜์— ๋™์ผํ•˜๊ฒŒ ์ˆซ์ž 5๋ฅผ ํ• ๋‹นํ•œ๋‹ค๊ณ  ๊ฐ€์ •
    • ๋ณ€์ˆ˜ ์˜์—ญ์— ์ง์ ‘ ๊ฐ’์„ ์ €์žฅ ํ•  ๊ฒฝ์šฐ : 500 (๋ณ€์ˆ˜ ๊ฐœ์ˆ˜) * 8 (์ˆซ์ž ์ €์žฅ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ) = 4,000 Bytes
    • ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ €์žฅํ•˜๊ณ  ์ฃผ์†Œ๋ฅผ ์ €์žฅ ํ•  ๊ฒฝ์šฐ : 500 (๋ณ€์ˆ˜ ๊ฐœ์ˆ˜) * 2 (์ฃผ์†Œ ์ €์žฅ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ, ๊ฐ€์ •) + 8 (์ˆซ์ž ์ €์žฅ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ) = 1,008 Bytes

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

๋ถˆ๋ณ€๊ฐ’ (Immutable Value)

  • ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ ์ง“๋Š” ์š”์†Œ : ๋ณ€์ˆ˜ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ
  • ๋ถˆ๋ณ€์„ฑ ์—ฌ๋ถ€๋ฅผ ๊ตฌ๋ถ„ ์ง“๋Š” ์š”์†Œ : ๋ฐ์ดํ„ฐ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ
  • ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ(Number, String, Boolean, Null, Undefined, Symbol)๋“ค์€ ๋ชจ๋‘ ๋ถˆ๋ณ€๊ฐ’

์ฝ”๋“œ ์˜ˆ์‹œ

let a = 'abc;
a = a + 'def';

let b = 5;
let c = 5;
b = 7;

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ(@1003) ๊ฐ’์— ๋ฌธ์ž์—ด 'abc'๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5004)๋ฅผ ์ €์žฅ
  • ๋ณ€์ˆ˜ a์˜ ๋ฉ”๋ชจ๋ฆฌ(@1003) ๊ฐ’์„ ๋ฌธ์ž์—ด 'abcdef'๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5005)๋กœ ๊ต์ฒด
  • ๋ณ€์ˆ˜ b์˜ ๋ฉ”๋ชจ๋ฆฌ(@1004) ๊ฐ’์— ์ˆซ์ž 5๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5002)๋ฅผ ์ €์žฅ
  • ๋ณ€์ˆ˜ c์˜ ๋ฉ”๋ชจ๋ฆฌ(@1005) ๊ฐ’์— ์ˆซ์ž 5๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5002)๋ฅผ ์ €์žฅ
  • ๋ณ€์ˆ˜ b์˜ ๋ฉ”๋ชจ๋ฆฌ(@1004) ๊ฐ’์„ ์ˆซ์ž 7์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5003)๋กœ ๊ต์ฒด

๊ฐ€๋ณ€๊ฐ’ (Mutable Value) - ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ํ• ๋‹น

์ฝ”๋“œ ์˜ˆ์‹œ

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

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ๋ณ€์ˆ˜ obj1์˜ ๋ฉ”๋ชจ๋ฆฌ(@1002) ํ• ๋‹น
  • ๋ฐ์ดํ„ฐ({a:1, b: 'bbb'})๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@5001) ํ• ๋‹น
  • ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ์—ฌ๋Ÿฌ ํ”„๋กœํผํ‹ฐ๋กœ ์ด๋ค„์ง„ ๋ฐ์ดํ„ฐ ์ธ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ.
  • ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด @5001์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ์˜์—ญ ์ฃผ์†Œ(@7103 ~ ?)๋ฅผ @5001 ์˜ ๊ฐ’์— ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ a์˜ ๋ฉ”๋ชจ๋ฆฌ(@7103)์— ์ˆซ์ž 1์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5003)๋ฅผ ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ b์˜ ๋ฉ”๋ชจ๋ฆฌ(@7104)์— ๋ฌธ์ž์—ด 'bbb'๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5004)๋ฅผ ์ €์žฅ

๊ฐ€๋ณ€๊ฐ’ - ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ํ”„๋กœํผํ‹ฐ ์žฌํ• ๋‹น

  • ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐจ์ด๋Š” '๊ฐ์ฒด์˜ ๋ณ€์ˆ˜(ํ”„๋กœํผํ‹ฐ) ์˜์—ญ'์ด ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋Š” ์ 
  • ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ €์žฅ ๋œ ๋ชจ๋“  ๊ฐ’์€ ๋ถˆ๋ณ€๊ฐ’
  • ๋ณ€์ˆ˜ ์˜์—ญ์— ์ €์žฅ ๋œ ๊ฐ’์€ ๊ฐ€๋ณ€๊ฐ’
  • ๋ถˆ๋ณ€๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜์—ญ์— ๊ฐ€๋ณ€๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋ณ€ํ•œ๋‹ค๊ณ  ํ‘œํ˜„

์ฝ”๋“œ ์˜ˆ์‹œ

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

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • obj1์˜ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ(@5001)์˜ ๊ฐ’์—๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์Œ
  • obj1์˜ ํ”„๋กœํผํ‹ฐ a๊ฐ€ ์ €์žฅ ๋œ ์ฃผ์†Œ(@7103) ๊ฐ’์„ ์ˆซ์ž 2๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5005)๋กœ ๊ต์ฒด

๊ฐ€๋ณ€๊ฐ’ - ์ค‘์ฒฉ ๋œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)์˜ ํ”„๋กœํผํ‹ฐ ํ• ๋‹น

์ฝ”๋“œ ์˜ˆ์‹œ

let obj = {
  x: 3,
  arr: [ 3, 4, 5]
};

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • obj๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@1002) ํ• ๋‹น
  • obj์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@5001) ํ• ๋‹นํ•˜๊ณ  obj ๋ฉ”๋ชจ๋ฆฌ(@1002) ๊ฐ’์— ์ €์žฅ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์ค‘ ํ”„๋กœํผํ‹ฐ๋กœ ์ด๋ค„์ง„ ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ @5001์˜ ๋ณ€์ˆ˜ ์˜์—ญ์„ ํ• ๋‹น(@7103 ~ ?)ํ•˜๊ณ  obj์˜ ๋ฐ์ดํ„ฐ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ(@5001) ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ x๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@7103)์— ์ˆซ์ž 3์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5002)๋ฅผ ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ arr๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@7104)์— ์ €์žฅ ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์ค‘ ํ”„๋กœํผํ‹ฐ๋กœ ์ด๋ค„์ง„ ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๋ณ€์ˆ˜ ์˜์—ญ์„ ํ• ๋‹น(@8104 ~ ?)ํ•˜๊ณ  ๋น„์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ(@5003)์— ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ arr์˜ ๋ณ€์ˆ˜ ์˜์—ญ์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ(@5003)์˜ ์ฃผ์†Œ๋ฅผ ํ”„๋กœํผํ‹ฐ arr๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ(@7104) ๊ฐ’์— ์ €์žฅ
  • ํ”„๋กœํผํ‹ฐ arr๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ์ค‘ 0๋ฒˆ์งธ์— ๋“ค์–ด๊ฐˆ ๋ฐ์ดํ„ฐ ์ˆซ์ž 3์€ ์ด๋ฏธ @5002 ๋ฒˆ์ง€์— ์žˆ์–ด์„œ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ @8104์— ์ €์žฅ
  • ๋‚˜๋จธ์ง€ 1, 2๋ฒˆ์งธ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์€ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•˜์—ฌ ๊ฐ๊ฐ @5004, @5005 ๋ฒˆ์ง€์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ @8105, @8106 ๊ฐ’์— ์ €์žฅ

๊ฐ€๋ณ€๊ฐ’ - ์ค‘์ฒฉ ๋œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)์˜ ํ”„๋กœํผํ‹ฐ ์žฌํ• ๋‹น

์ฝ”๋“œ ์˜ˆ์‹œ

let obj = {
  x: 3,
  arr: [ 3, 4, 5]
};

obj.arr = 'str';

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • obj.arr ํ”„๋กœํผํ‹ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ(@7104) ๊ฐ’์€ ๋ฌธ์ž์—ด 'str'์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5006)์œผ๋กœ ๊ต์ฒด
  • ๊ฐ์ฒด [3, 4, 5] ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์—ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ (@5003, @8104 ~)๋Š” GC(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ)์˜ ์ˆ˜๊ฑฐ ๋Œ€์ƒ์ด ๋จ

๋ณ€์ˆ˜ ๋ณต์‚ฌ ๋น„๊ต

์ฝ”๋“œ ์˜ˆ์‹œ

let a = 10;
let b = a;

let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ๋‹จ์ˆœ ๋ณต์‚ฌ๋Š” ๋ณ„๋‹ค๋ฅธ ์ฐจ์ด๊ฐ€ ์—†์Œ

๋ณ€์ˆ˜ ๋ณต์‚ฌ ํ›„ ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ

์ฝ”๋“œ ์˜ˆ์‹œ

let a = 10;
let b = a;

let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;

b = 15;
obj2.c = 20;
  • ๋ณต์‚ฌํ•˜๊ณ  ํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ ์‹œ ์›๋ณธ์— ์˜ํ–ฅ์„ ์•ˆ ๋ฏธ์น  ๊ฒƒ์„ ๋Œ€๊ธฐ ํ•จ
  • a, b ๊ฐ’์ด ๋‹ค๋ฅด๊ณ , obj1, obj2๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ
  • ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Œ

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ธ a, b์˜ ๊ฒฝ์šฐ์—๋Š” b์˜ ๋ฉ”๋ชจ๋ฆฌ(@1002) ๊ฐ’์ด ์ˆซ์ž 15๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5004)๋กœ ๋ณ€๊ฒฝ ๋จ. ๊ทธ๋ž˜์„œ a !== b ์„ฑ๋ฆฝ
  • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜์ธ obj1, obj2์˜ ๊ฒฝ์šฐ์—๋Š” obj2์˜ ๋ฉ”๋ชจ๋ฆฌ(@1004)์—๋Š” ์ „ํ˜€ ๋ณ€ํ™”๊ฐ€ ์—†๊ณ , ํ”„๋กœํผํ‹ฐ c๊ฐ€ ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ(@7103)์˜ ๊ฐ’์ด ์ˆซ์ž 20์ด ์ €์žฅ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(@5005)๋กœ ๋ณ€๊ฒฝ ๋จ.
  • ๊ทธ๋Ÿฐ๋ฐ obj1๊ณผ obj2์˜ ๋ฉ”๋ชจ๋ฆฌ(@1003, @1004) ๊ฐ’์—๋Š” ์ „ํ˜€ ๋ณ€ํ™”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— obj1 !== obj2๋Š” ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Œ

๋ณ€์ˆ˜ ๋ณต์‚ฌ ํ›„ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝ

  • ์œ„์˜ ์˜ˆ์ œ์™€ ๋‹ค๋ฅด๊ฒŒ ์ด๋ฒˆ์—๋Š” ์•„์˜ˆ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์„œ ๋ณ€๊ฒฝ

์ฝ”๋“œ ์˜ˆ์‹œ

let a = 10;
let b = a;

let obj1 = { c: 10, d: 'ddd' };
let obj2 = obj1;

b = 15;
obj2 = { c: 20, d: 'ddd' };

๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”

  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๋ณ€์ˆ˜ ์˜์—ญ(@8204 ~ ?)์ด ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น
  • ํ•ด๋‹น ๋ณ€์ˆ˜ ์˜์—ญ์„ ์ €์žฅ ํ•  ๋ฐ์ดํ„ฐ ์˜์—ญ(@5006)๋„ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น
  • ๊ทธ ๊ฐ’์„ obj2 ๋ฉ”๋ชจ๋ฆฌ(@1004) ๊ฐ’์— ์ €์žฅ
  • ์„œ๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— obj1 !== obj2 ์„ฑ๋ฆฝ

๋ถˆ๋ณ€ ๊ฐ์ฒด(immutable object)

  • ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” React.js, Vue.js, Angular.js ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋žจ, ๋””์ž์ธ ํŒจํ„ด์—์„œ๋„ ๋“ฑ์žฅํ•˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ดˆ ๊ฐœ๋…
  • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ '๊ฐ€๋ณ€'์€ ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์„ฑ๋ฆฝ

๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•

  • ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์žฌํ• ๋‹น ํ•˜๊ธฐ๋กœ ๊ทœ์น™์„ ์ •ํ•จ
  • ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋„๊ตฌ๋ฅผ ํ™œ์šฉ
    • immutable.js, immer.js, immutability-helper ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ES6์˜ spread operator, Object.assign ๋ฉ”์„œ๋“œ ๋“ฑ

๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ๊ฐ’์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ์ฒด์— ๋ณ€๊ฒฝ์„ ๊ฐ€ํ•˜๋”๋ผ๋„ ์›๋ณธ ๊ฐ์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š์•„์•ผ ๋˜๋Š” ๊ฒฝ์šฐ

๊ฐ์ฒด์˜ ๊ฐ€๋ณ€์„ฑ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์  ์˜ˆ์‹œ

let user = {
  name: 'Seongil',
  gender: 'male'
};

const changeName = (user, newName) => {
  let newUser = user;
  newUser.name = newName;
  return newUser;
}

const user2 = changeName(user, 'modolee');

if (user !== user2) {
  console.log('์œ ์ € ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
}

console.log(user.name, user2.name); // modolee modolee
console.log(user === user2); // true
  • ๊ฒฐ๊ณผ ํ™•์ธ - ๊ฐœ๋ฐœ์ž ๋„๊ตฌ console์— ์ฐํžˆ๋Š” ๋‚ด์šฉ ํ™•์ธ
  • ์ด๋ฆ„์„ ๋„˜๊ธฐ๋ฉด์„œ ๊ธฐ์กด ์œ ์ €๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์œ ์ €๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์—ˆ์œผ๋‚˜ ๊ธฐ์กด ์œ ์ € ์ด๋ฆ„๊นŒ์ง€ ๋ณ€๊ฒฝ ๋จ

๊ฐ์ฒด์˜ ๊ฐ€๋ณ€์„ฑ์— ๋”ฐ๋ฅธ ๋ฌธ์ œ์  ํ•ด๊ฒฐ ์˜ˆ์‹œ

let user = {
  name: 'Seongil',
  gender: 'male'
};

const changeName = (user, newName) => {
  return {
    name: newName,
    gender: user.gender
  };
}

const user2 = changeName(user, 'modolee');

if (user !== user2) {
  console.log('์œ ์ € ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); // ์œ ์ € ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
}

console.log(user.name, user2.name); // Seongil modolee
console.log(user === user2); // false
  • ๊ฒฐ๊ณผ ํ™•์ธ
  • ๊ธฐ์กด ์œ ์ € ์ •๋ณด๋„ ์œ ์ง€๋˜๊ณ  ์ƒˆ๋กœ์šด ์œ ์ €๋„ ์ƒ์„ฑ ๋จ
  • ํ•˜์ง€๋งŒ user.gender๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด์•ผ ๋˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Œ
  • ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ๋จ

๊ธฐ์กด ์ •๋ณด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์˜ˆ์‹œ (์–‡์€ ๋ณต์‚ฌ)

let user = {
  name: 'Seongil',
  gender: 'male'
};

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

const user2 = copyObject(user);

user2.name = 'modolee';

if (user !== user2) {
  console.log('์œ ์ € ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.'); // ์œ ์ € ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
}

console.log(user.name, user2.name); // Seongil modolee
console.log(user === user2); // false
  • ๊ฒฐ๊ณผ ํ™•์ธ
  • for ๋ฌธ์„ ์ด์šฉํ•ด์„œ target ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋“ค์„ ๋ณต์‚ฌ
  • ์–‡์€ ๋ณต์‚ฌ๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ ์•„์‰ฌ์›€
  • ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ Spread operator๋„ ๋™์ผํ•˜๊ฒŒ ์–‡์€ ๋ณต์‚ฌ๋ฅผ ์‹คํ–‰ํ• ๊นŒ?๋ฅผ ์‹คํ—˜ํ•ด ๋ด„
    • user์— favorite ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋ฐฐ์—ด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์Œ
    • ์œ ์ € ๋ณต์‚ฌ ์ดํ›„์— favorite.push๋ฅผ ์‹คํ–‰
    • ๊ธฐ์กด ์œ ์ €์˜ favorite๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ ๋จ (์–‡์€ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚จ)
    • ๊ฒฐ๊ณผ ํ™•์ธ

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

  • ์–‡์€ ๋ณต์‚ฌ (shallow copy) : ๋ฐ”๋กœ ์•„๋ž˜ ๋‹จ๊ณ„์˜ ๊ฐ’๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์ค‘์ฒฉ ๋œ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ ๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๊ทธ ์ฃผ์†Œ ๊ฐ’๋งŒ ๋ณต์‚ฌ
    • ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ์›๋ณธ๊ณผ ์‚ฌ๋ณธ์ด ๋ชจ๋‘ ๋™์ผํ•œ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
    • ์‚ฌ๋ณธ์„ ๋ฐ”๊พธ๋ฉด ์›๋ณธ๋„ ๋ฐ”๋€Œ๊ณ , ์›๋ณธ์„ ๋ฐ”๊พธ๋ฉด ์‚ฌ๋ณธ๋„ ๋ฐ”๋€œ
  • ๊นŠ์€ ๋ณต์‚ฌ (deep copy) : ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐ’๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์•„์„œ ์ „๋ถ€ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ค‘์ฒฉ ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์–•์€ ๋ณต์‚ฌ ์˜ˆ์‹œ

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

let user = {
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    github: 'http://github.com/modolee',
    blog: 'http://velog.io/@modolee'
  }
};

let user2 = copyObject(user);

user2.name = 'modolee';
console.log(user.name === user2.name); // false

user.urls.blog = 'https://medium.com/@modolee';
console.log(user.urls.blog === user2.urls.blog); // true

user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin); // true
  • ๊ฒฐ๊ณผ ํ™•์ธ
  • user์˜ urls ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด user2๋กœ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋˜๊ณ , ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

์ค‘์ฒฉ ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๊นŠ์€ ๋ณต์‚ฌ ์˜ˆ์‹œ

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

let user = {
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    github: 'http://github.com/modolee',
    blog: 'http://velog.io/@modolee'
  }
};

let user2 = copyObject(user);
user2.urls = copyObject(user.urls);

user2.name = 'modolee';
console.log(user.name === user2.name); // false

user.urls.blog = 'https://medium.com/@modolee';
console.log(user.urls.blog === user2.urls.blog); // false

user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin); // false
  • user๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ urls๋„ ๋ณ„๋„๋กœ ๋ณต์‚ฌ
  • ๊ฒฐ๊ณผ ํ™•์ธ

๊ฐ์ฒด์˜ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฒ”์šฉ ํ•จ์ˆ˜ ์˜ˆ์‹œ

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

let user = {
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    github: 'http://github.com/modolee',
    blog: ['http://velog.io/@modolee', 'https://medium.com/@modolee']
  }
};

let user2 = copyObjectDeep(user);

user2.name = 'modolee';
console.log(user.name === user2.name); // false

user.urls.blog[1] = 'https://steemit.com/@modolee';
console.log(user.urls.blog[1] === user2.urls.blog[1]); // false

user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin); // false

console.log(user);
/*
{
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    blog: ['http://velog.io/@modolee', 'https://steemit.com/@modolee'],
    github: 'http://github.com/modolee'
  }
}
*/

console.log(user2);
/*
{
  name: 'modolee',
  urls: {
    linkedin: '',
    blog: {0: 'http://velog.io/@modolee', 1: 'https://medium.com/@modolee'},
    github: 'http://github.com/modolee'
  }
}
*/
  • ์žฌ๊ท€์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๋ณต์‚ฌ
  • ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ์‚ด์ง ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ ๋˜์—ˆ์ง€๋งŒ, ์‚ฌ์šฉ์—๋Š” ์ง€์žฅ์ด ์—†์Œ
  • ๊ฒฐ๊ณผ ํ™•์ธ

JSON์„ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ๊นŠ์€ ๋ณต์‚ฌ ์˜ˆ์‹œ

const copyObjectViaJson = (target) => {
  return JSON.parse(JSON.stringify(target));
};

let user = {
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    github: 'http://github.com/modolee',
    blog: ['http://velog.io/@modolee', 'https://medium.com/@modolee']
  }
};

let user2 = copyObjectViaJson(user);

user2.name = 'modolee';
console.log(user.name === user2.name); // false

user.urls.blog[1] = 'https://steemit.com/@modolee';
console.log(user.urls.blog[1] === user2.urls.blog[1]); // false

user2.urls.linkedin = '';
console.log(user.urls.linkedin === user2.urls.linkedin); // false

console.log(user);
/*
{
  name: 'Seongil',
  urls: {
    linkedin: 'http://linkedin.com/in/modolee',
    blog: ['http://velog.io/@modolee', 'https://steemit.com/@modolee'],
    github: 'http://github.com/modolee'
  }
}
*/

console.log(user2);
/*
{
  name: 'modolee',
  urls: {
    linkedin: '',
    blog: ['http://velog.io/@modolee', 'https://medium.com/@modolee'],
    github: 'http://github.com/modolee'
  }
}
*/
  • ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ๋ฒ•์œผ๋กœ ํ‘œํ˜„ ๋œ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ JSON ๊ฐ์ฒด๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๊ฐ€ ์žˆ์Œ
  • ๋‹ค๋งŒ ์ˆจ๊ฒจ์ง„ ํ”„๋กœํผํ‹ฐ์ธ proto ์™€ getter/setter ๋“ฑ๊ณผ ๊ฐ™์ด JSON์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํ”„๋กœํผํ‹ฐ๋Š” ๋ฌด์‹œ ๋จ
  • httpRequest๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๋“ฑ ์ˆœ์ˆ˜ํ•œ ์ •๋ณด๋งŒ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉ
  • Function์€ ๋ณต์‚ฌ๊ฐ€ ์•ˆ๋จ
  • ๊ฒฐ๊ณผ ํ™•์ธ

undefined์™€ null

  • undefined, null ๋ชจ๋‘ '์—†์Œ'์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’
  • ์˜๋ฏธ๋Š” ๊ฐ™์ง€๋งŒ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ

์ž๋™์œผ๋กœ undefined๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒฝ์šฐ

let a;
console.log(a); // (1) undefined. ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์— ์ ‘๊ทผ

let obj = { a: 1 };
console.log(obj.a); // 1
console.log(obj.b); // (2) undefined. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ
// console.log(b); // Uncaught ReferenceError: b is not defined. ์ด๊ฑด ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ

const func = () => {};
const c = func(); // (3) return ๊ฐ’์ด ์—†์œผ๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
console.log(c); // undefined
  1. ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜, ์ฆ‰ ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž์— ์ ‘๊ธ‰ํ•  ๋•Œ
  2. ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ
  3. return ๋ฌธ์ด ์—†๊ฑฐ๋‚˜ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ

undefined์™€ ๋ฐฐ์—ด

  • ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ undefined๋ฅผ ๋ถ€์—ฌํ–ˆ์ง€๋งŒ, ๋ฐฐ์—ด์—์„œ๋Š” ์กฐ๊ธˆ ํŠน์ดํ•˜๊ฒŒ ๋™์ž‘
let arr1 = [];
arr1.length = 3;
console.log(arr1); // [empty x 3]

let arr2 = new Array(3);
console.log(arr2); // [empty x 3]

let arr3 = [undefined, undefined, undefined];
console.log(arr3); // [undefined, undefined, undefined]
  • ๋ฐฐ์—ด์—์„œ๋Š” ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๊ณต๊ฐ„์€ ํ™•๋ณดํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฐ’๋„ ํ• ๋‹น๋˜์ง€ ์•Š์Œ
  • ๊ฒฐ๊ณผ ํ™•์ธ

๋นˆ ์š”์†Œ(Empty)๋ฅผ ํฌํ•จํ•œ ๋ฐฐ์—ด์˜ ์ˆœํšŒ

  • ๋นˆ ์š”์†Œ๋Š” ์ˆœํšŒ์™€ ๊ด€๋ จ ๋œ ๋งŽ์€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋“ค์˜ ์ˆœํšŒ ๋Œ€์ƒ์—์„œ ์ œ์™ธ
let arr1 = [undefined, 1];
let arr2 = [];
arr2[1] = 1;

arr1.forEach((value, index) => { console.log(value, index); }); // undefined 0 / 1 1
arr2.forEach((value, index) => { console.log(value, index); }); // 1 1

console.log(arr1.map((value, index) => { return value + index })); // [NaN, 2]
console.log(arr2.map((value, index) => { return value + index })); // [empty, 2]

console.log(arr1.filter((value) => { return !value; })); // [undefined]
console.log(arr2.filter((value) => { return !value; })); // []

console.log(arr1.reduce((accumulator, value, index) => { return accumulator + value + index; }, '')); // undefined011
console.log(arr2.reduce((accumulator, value, index) => { return accumulator + value + index; }, '')); // 11
  • ๋ช…์‹œ์ ์œผ๋กœ undefined๋ฅผ ๋Œ€์ž…ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•ด์„œ ์ˆœํšŒ
  • ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์ˆœํšŒ์—์„œ ์ œ์™ธ
  • ๊ฒฐ๊ณผ ํ™•์ธ

๋ฐฐ์—ด์— ๋Œ€ํ•œ ํŽธ๊ฒฌ

  • ๋ฐฐ์—ด์€ ๋ฌด์กฐ๊ฑด length ํ”„๋กœํผํ‹ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋นˆ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ๊ฐ ๊ณต๊ฐ„์— ์ธ๋ฑ์Šค๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ. ๋‹น์—ฐํžˆ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ ํ–ˆ์Œ
  • ์‹ค์ œ๋กœ๋Š” ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŠน์ • ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ง€์ •ํ•  ๋•Œ ๋น„๋กœ์†Œ ๋นˆ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅ

undefined์˜ ๊ตฌ๋ถ„

์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€์—ฌํ•œ ๊ฒฝ์šฐ

  • ์‹ค์กด ๋ฐ์ดํ„ฐ. undefined ๋ผ๋Š” ๋ฐ์ดํ„ฐ ํ˜•์˜ ๊ฐ’
  • ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ๊ณ ์œ ์˜ ํ‚ค ๊ฐ’(ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„)์ด ์‹ค์กดํ•˜๊ฒŒ ๋˜์–ด ์ˆœํšŒ์˜ ๋Œ€์ƒ์ด ๋จ

๋น„์–ด์žˆ๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ

  • ์‹ค์กดํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ. ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๊ฐ’์ด ์—†์Œ
  • JavaScript ์—”์ง„์ด ํ•˜๋Š” ์ˆ˜ ์—†์ด undefined๋ฅผ ๋ฐ˜ํ™˜
  • ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ ๋˜๋Š” ๋ฐฐ์—ด์˜ ํ‚ค ๊ฐ’ ์ž์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธ

undefined์˜ ์ž๋™ ํ• ๋‹น์˜ ์‹ค์ œ ๋™์ž‘

  • ์ž…๋ฌธ์„œ์—์„œ๋Š” ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋ณ€์ˆ˜์— undefined๋ฅผ ํ• ๋‹นํ•œ๋‹ค๊ณ  ์„ค๋ช… ๋จ
  • ์‹ค์ œ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธํ•  ๋•Œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ• ๋‹น๋˜์ง€ ์•Š๊ณ  ๋๋‚˜๋ฉฐ, ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ JavaScript ์—”์ง„์ด ์–ด์ฉ” ์ˆ˜ ์—†์ดundefined๋ฅผ ๋ฐ˜ํ™˜

์ฝ”๋“œ ์˜ˆ์‹œ

  • ๊ทธ๋Ÿฌ๋ฉด ์‹ค์ œ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€์—ฌํ•œ ๊ฒฝ์šฐ์™€ JavaScript ์—”์ง„์ด ํ•˜๋Š” ์ˆ˜ ์—†์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ undefined๋Š” ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰๋˜๋Š” ๊ฒƒ์ธ๊ฐ€? ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
let a;
let b = undefined;

console.log(a); // undefined
console.log(a == b); // true
console.log(a === b); // true

undefined์™€ null์˜ ๋น„๊ต

const n = null;
console.log(typeof n); // object

console.log(n == undefined); // true
console.log(n == null); // true
console.log(n === undefined); // false
console.log(n === null); // true
  • ๊ฒฐ๊ณผ ํ™•์ธ
  • null์˜ ํƒ€์ž…์ด object๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์€ JavaScript์˜ ๋ฒ„๊ทธ
  • '์—†์Œ'์„ ํ‘œํ˜„ ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” null์„ ์‚ฌ์šฉ
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ‘œํ˜„ํ•œ '์—†์Œ'(null) ์ธ์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” === ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๊ต

์ •๋ฆฌ

  • ๋ฐ์ดํ„ฐ ํƒ€์ž…
    • ๊ธฐ๋ณธํ˜• : ๋ถˆ๋ณ€๊ฐ’
    • ์ฐธ์กฐํ˜• : ๊ฐ€๋ณ€๊ฐ’
  • ๋ณ€์ˆ˜ : ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
  • ์‹๋ณ„์ž : ๋ณ€์ˆ˜์˜ ์ด๋ฆ„
  • ๋ณ€์ˆ˜ ์„ ์–ธ
    • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋นˆ ๊ณต๊ฐ„์— ์‹๋ณ„์ž ์ €์žฅ
    • ๊ทธ ๊ณต๊ฐ„์˜ ๊ฐ’์œผ๋กœ undefined๋ฅผ ํ• ๋‹น
  • ๋ณ€์ˆ˜์— ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ ํ• ๋‹น
    • ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ๊ทธ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜์˜ ๊ฐ’ ์˜์—ญ์— ํ• ๋‹น
  • ๋ณ€์ˆ˜์— ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ํ• ๋‹น
    • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋“ค์„ ์œ„ํ•œ ๋ณ€์ˆ˜ ์˜์—ญ์„ ๋ณ„๋„๋กœ ํ™•๋ณด
    • ํ™•๋ณด ๋œ ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜์— ์—ฐ๊ฒฐ
    • ์•ž์„œ ํ™•๋ณดํ•œ ๋ณ€์ˆ˜ ์˜์—ญ์— ๊ฐ ํ”„๋กœํผํ‹ฐ์˜ ์‹๋ณ„์ž๋ฅผ ์ €์žฅ
    • ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๊ณ  ๊ทธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„์ž๋“ค๊ณผ ๋งค์นญ
  • ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋ณ€๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” '๊นŠ์€ ๋ณต์‚ฌ'๊ฐ€ ํ•„์š”
  • '์—†์Œ'์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’
    • undefined : ์–ด๋–ค ๋ณ€์ˆ˜์— ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’
    • null : ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ '์—†์Œ'์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์ž…ํ•œ ๊ฐ’
    • ๋ช…์‹œ์ ์œผ๋กœ '์—†์Œ'์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด undefined์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ง€์–‘

์ฐธ๊ณ 

profile
๊ธฐ์ดˆ๊ฐ€ ํƒ„ํƒ„ํ•œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊ฟ‰๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š” !ํฌ์ŠคํŒ… ์ž˜ ์ฝ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
ํ•ญ์ƒ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, object์˜ ์ƒ์„ฑ์ง€๋ฒˆ์—๋Š” ์–ด๋–ค์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ๋˜์–ด์žˆ์„๊นŒ ๊ถ๊ธˆํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰ ์‹ค์งˆ์ ์ธ value ๊ฐ’๋“ค๋งŒ ์ €์žฅ์ด๋˜๋Š”์ง€.. ์•„๋‹ˆ๋ฉด ์–ด๋–ค ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์“ฐ๋Š” ํ”„๋กœํผํ‹ฐ(์‹๋ณ„์ž)์ž์ฒด๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„๋„ ํ•„์š”ํ•œ๊ฑด์ง€.. ์ œ ์ƒ๊ฐ์—” ์‹๋ณ„์ž ์ž์ฒด๋งŒ์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด ๋‹น์—ฐํžˆ ํ•„์š”ํ• ๊ฒƒ๊ฐ™์€๋ฐ ์–ด๋””์—์„œ๋„ '์‹๋ณ„์ž'๋Š” ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถ™์€ ๋ณ„์นญ์ด๋‹ค ๋ผ๊ณ ๋งŒ ๋‚˜์™€์žˆ๋”๋ผ๊ตฌ์š”... ๊ทธ๋Ÿฐ๋ฐ ์‹๋ณ„์ž์ด๋ฆ„ ์ž์ฒด๋„ ๋ฐ์ดํ„ฐ์ด๊ณ , ์–ด๋”” ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด์„œ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค๋Š” ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์ด ์žˆ์–ด์•ผํ•˜์ง€์•Š๋‚˜? ๊ถ๊ธˆํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ, object์˜ ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•˜๋ฉด, ํ•ด๋‹น object๋‚ด๋ถ€์˜ ์‹๋ณ„์ž(ํ”„๋กœํผํ‹ฐ)๋“ค๋งŒ์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด ์กด์žฌํ•˜๊ณ , ํ”„๋กœํผํ‹ฐ์— ๋งคํ•‘๋˜๋Š” ์ฃผ์†Œ๊ฐ’์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋“ค์ด ์ ์žฌ๋˜๋Š” ํ˜•ํƒœ๊ฐ€๋œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ ๊นŒ์š”?

1๊ฐœ์˜ ๋‹ต๊ธ€