ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ ์‚ฌ์‹ค ๊ฐ์ฒด๋‹ค!
    ์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ 2023. 2. 13. 20:05

    typeof ๋ฐฐ์—ด === ๊ฐ์ฒด?

    typeof ๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ํƒ€์ž…์„ ์ฝ˜์†”์— ์ฐ์–ด๋ณด๋ฉด object๋ผ๊ณ  ๋‚˜์˜จ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋ฐฐ์—ด์ด๋ผ๋Š” ํƒ€์ž…์€ ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐฐ์—ด์€ ์‚ฌ์‹ค์€ ๊ฐ์ฒด ํƒ€์ž…์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€๋Š” ๊ตฌ๋ณ„๋˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

    ๊ตฌ๋ถ„ ๊ฐ์ฒด ๋ฐฐ์—ด
    ๊ตฌ์กฐ ํ”„๋กœํผํ‹ฐ ํ‚ค, ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ธ๋ฑ์Šค์™€ ์š”์†Œ
    ๊ฐ’์˜ ์ฐธ์กฐ ํ”„๋กœํผํ‹ฐ ํ‚ค  ์ธ๋ฑ์Šค
    ๊ฐ’์˜ ์ˆœ์„œ X O
    length ํ”„๋กœํผํ‹ฐ X O

    ๊ฐ€์žฅ ๋ช…ํ™•ํ•œ ์ฐจ์ด์ ์€ "๊ฐ’์˜ ์ˆœ์„œ"์™€ "length ํ”„๋กœํผํ‹ฐ"๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ์ง€๋‹Œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ/๋งˆ์ง€๋ง‰/ํŠน์ • ์œ„์น˜๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

    ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๋ฐฐ์—ด

    ๋ฐฐ์—ด์—๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

    • ๋ฐ€์ง‘ ๋ฐฐ์—ด(dense array)
      • ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•˜๋Š”, ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์—ฐ์†์ ์œผ๋กœ ๋‚˜์—ด๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.
      • ๋นˆํ‹ˆ์—†์ด ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋‹จ ํ•œ ๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ ์ž„์˜์˜ ์š”์†Œ์— ์ ‘๊ทผ : O(1)
        • ์ธ๋ฑ์Šค๊ฐ€ 0์ธ ์š”์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ: 1000(์‹œ์ž‘์œ„์น˜) + 0 * 8 = 1000
        • ์ธ๋ฑ์Šค๊ฐ€ 1์ธ ์š”์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ: 1000 + 1 * 8 = 1000
          • ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์œ„์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํƒ์ƒ‰์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด O(1)๋งŒ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ํŠน์ • ์š”์†Œ๋ฅผ ๋ฐœ๊ฒฌํ•  ๋•Œ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ์„ ํ˜• ๊ฒ€์ƒ‰์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
          • ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ์‚ฝ์ž…, ์‚ญ์ œ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์š”์†Œ๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
    • ํฌ์†Œ ๋ฐฐ์—ด(sparse array)
      • ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์œ„ํ•œ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋™์ผํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.
      • ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ€์ง‘ ๋ฐฐ์—ด์ด ์•„๋‹Œ ํฌ์†Œ ๋ฐฐ์—ด๋กœ, ์—„๋ฐ€ํžˆ ๋งํ•ด ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์˜ ๋™์ž‘์„ ํ‰๋‚ด ๋‚ธ ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด๋‹ค

     

    getOwnPropertyDescriptors๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์„ ์ฐ์–ด๋ณด๋‹ˆ, 0, 1, 2๋ผ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์ฐํžˆ๊ณ , length๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ์‚ฌ์‹ค ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค!

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ๊ฐ’์€ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์ด๋ผ๋„ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค! ์‚ฌ์‹ค ๋ฐฐ์—ด์€ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์—!!

    ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด ์žฅ๋‹จ์ 

    • ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด
      • ์ ‘๊ทผ(O(1)) - ์ธ๋ฑ์Šค๋กœ ์š”์†Œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์š”์†Œ ์‚ฝ์ž…, ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ 
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด
      • ์ ‘๊ทผ(O(n)) - ์‚ฌ์‹ค์€ ํ•ด์‹œํ…Œ์ด๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ ํ˜• ๊ฒ€์ƒ‰์„ ํ•จ
      • ์š”์†Œ ์‚ฝ์ž…, ์‚ญ์ œ์— ๋น ๋ฅด๋‹ค.

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ธ๋ฑ์Šค๋กœ ์š”์†Œ์— ์ ‘๊ทผ์‹œ ์ผ๋ฐ˜ ๋ฐฐ์—ด๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค๋Š” ๊ตฌ์กฐ์ ์ธ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋ฐฐ์—ด์„ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ข€ ๋” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ์ตœ์ ํ™”ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์ด ์ผ๋ฐ˜ ๊ฐ์ฒด๋ณด๋‹ค ์•ฝ 2๋ฐฐ ์ •๋„ ๋น ๋ฅด๋‹ค.

    length ํ”„๋กœํผํ‹ฐ์™€ ํฌ์†Œ ๋ฐฐ์—ด

    ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ดํŽด ๋ณธ length ํ”„๋กœํผํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    length: {value: 3, writable: true, enumerable: false, configurable: false}

    writable์ด true์ด๋‹ˆ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ณ , enumerable์ด false์ด๋‹ˆ ๋ฐ˜๋ณต๋ฌธ ๋“ฑ์—์„œ length ํ”„๋กœํผํ‹ฐ๋Š” ์ œ์™ธํ•˜๊ณ  ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๋ฉด length ํ”„๋กœํผํ‹ฐ ๊ฐ’์€ ์ž๋™ ๊ฐฑ์‹ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž„์˜์˜ ์ˆซ์ž ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ํ˜„์žฌ length๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ

    ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ length ํ”„๋กœํผํ‹ฐ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

    const arr = [1,2,3,4,5];
    
    arr.length = 3;
    
    console.log(arr); // [1,2,3]

    ํ˜„์žฌ length๋ณด๋‹ค ํฐ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ - ํฌ์†Œ ๋ฐฐ์—ด

    length๊ฐ’์€ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, ์‹ค์ œ ๋ฐฐ์—ด์—๋Š” ์•„๋ฌด๋Ÿฐ ๋ณ€ํ•จ์ด ์—†๋‹ค. ๊ฐ’ ์—†์ด ๋น„์–ด ์žˆ๋Š” ์š”์†Œ๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋นˆ ์š”์†Œ๋ฅด ์ƒ์„ฑํ•˜์ง€๋„ ์•Š๋Š”๋‹ค.

    const arr = [1];
    
    arr.length = 3;
    
    console.log(arr.length);   // 3
    console.log(arr);    // [1, empty * 2]
    

     

    ์ฝ˜์†”์— ์ฐ์–ด๋ณด๋‹ˆ length์˜ value๋Š” 3์ด ๋˜์—ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 0์˜ ํ‚ค๋งŒ ํ”„๋กœํผํ‹ฐ๋กœ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

     

    ์ด๋ ‡๋“ฏ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์œ„์น˜ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ํฌ์†Œ๋ฐฐ์—ด์ด๋ผ ํ•œ๋‹ค. ํฌ์†Œ๋ฐฐ์—ด์˜ lenght๋Š” ํฌ์†Œ ๋ฐฐ์—ด์˜ ์‹ค์ œ ์š”์†Œ ๊ฐœ์ˆ˜๋ณด๋‹ค ์–ธ์ œ๋‚˜ ํฌ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ด๋Ÿฐ ํฌ์†Œ๋ฐฐ์—ด์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ๋ฐฐ์—ด ๊ฐœ๋…์—๋„ ๋งž์ง€ ์•Š๊ณ , ์„ฑ๋Šฅ๋„ ์ข‹์ง€ ์•Š์œผ๋‹ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค.

    ๋˜ํ•œ, ๋ฐฐ์—ด ์ƒ์„ฑ์‹œ์—๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ์š”์†Œ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์œ„์น˜์‹œํ‚ค๋Š” ๊ฒƒ์ด ์šฐ์„ ์ด๋‹ค.

    ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด์™€ ๋ฐฐ์—ด์˜ ์ฐจ์ด

    ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , lengthํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
    ์œ„์—์„œ ๋ฐฐ์—ด๊ณผ ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด ๋ฐ”๋กœ ์ด ๋‘๊ฐ€์ง€๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์ด ๋‘ ๊ฐ€์ง€๋งŒ ์ถฉ์กฑํ•˜๋ฉด ๋ฐฐ์—ด์ด์ง€ ์•Š์„๊นŒ?

    ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์ฝ˜์†”์— ์ฐ์–ด๋ณด๋ฉด ์ฐจ์ด๋ฅผ ๊ฐ€์žฅ ๋นจ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    console.dir([1,2,3]);  // > Array(3)
    
    const arrayLike = {
        0: 1,
        1: 2,
        2: 3,
        length: 3
    };
    
    console.dir(arrayLike);   // > Object

    ๋ฐฐ์—ด์˜ ํ”„๋กœํ† ํƒ€์ž…์€ Array์ธ ๋ฐ˜๋ฉด, ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด์˜ prototype์€ Object์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด Array์˜ __proto__๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Array.from์„ ํ†ตํ•ด ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

     

    ๋Œ“๊ธ€

Designed by Tistory.