Home ๐Ÿš€ JavaScript ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์ˆ˜๋งŒ ๋ฒˆ์˜ ๋ฐ˜๋ณต์„ ๊ฒฌ๋””๋Š” ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•
Post
Cancel

๐Ÿš€ JavaScript ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์ˆ˜๋งŒ ๋ฒˆ์˜ ๋ฐ˜๋ณต์„ ๊ฒฌ๋””๋Š” ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•

๋‹จ์ˆœํžˆ โ€˜๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œโ€™๋ฅผ ๋„˜์–ด โ€˜๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œโ€™๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ 4๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐ€์ด๋“œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


1. shift() ๋Œ€์‹  ์ธ๋ฑ์Šค ์ง์ ‘ ์ฐธ์กฐ

  • ๋ฌธ์ œ์ : shift()๋Š” ๋ฐฐ์—ด์˜ ๋งจ ์•ž ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค, ๋’ค์— ๋‚จ์€ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹น๊น๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ N์ด๋ผ๋ฉด N๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€๋กœ ๋ฐœ์ƒํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N)์ด ๋ฉ๋‹ˆ๋‹ค. ํ(Queue)์˜ ํฌ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ์ฑ…: ๋ฐฐ์—ด์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๋‹ค์Œ์— ๊บผ๋‚ผ ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” head ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค ์ง์ ‘ ์ฐธ์กฐ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.

  • ์˜ˆ์‹œ:

1
2
3
4
5
6
7
8
9
10
// โŒ ๋น„ํšจ์œจ์  (๋งค๋ฒˆ ๋ฐฐ์—ด ์žฌ์ •๋ ฌ)
while (queue.length > 0) {
    const item = queue.shift();
}

// โœ… ํšจ์œจ์  (์ธ๋ฑ์Šค ์ง์ ‘ ์ฐธ์กฐ๋กœ ํฌ์ธํ„ฐ๋งŒ ์ด๋™)
let head = 0;
while (head < queue.length) {
    const item = queue[head++];
}


2. ์ „๊ฐœ ์—ฐ์‚ฐ์ž(โ€ฆ) ๋Œ€์‹  push()

  • ๋ฌธ์ œ์ : [โ€ฆarr, newItem]๊ณผ ๊ฐ™์€ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋Š” ๊ตฌ๋ฌธ์€ ๊น”๋”ํ•˜์ง€๋งŒ, ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ์“ฐ๋ฉด ๋งค๋ฒˆ ์ˆ˜๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ์ฑ…: ๊ธฐ์กด ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜๋Š” push()๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. push()๋Š” ๋ฐฐ์—ด์˜ ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€๋งŒ ํ•˜๋ฏ€๋กœ ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

  • ์˜ˆ์‹œ:

1
2
3
arr = [...arr, item] : *O(N)* (๋ณต์‚ฌ ๋น„์šฉ ๋ฐœ์ƒ)

arr.push(item) : *O(1)* (์ถ”๊ฐ€ ๋น„์šฉ๋งŒ ๋ฐœ์ƒ)


3. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น(Destructuring) ๋Œ€์‹  ์ธ๋ฑ์Šค ์ง์ ‘ ์ฐธ์กฐ

  • ๋ฌธ์ œ์ : const [x, y] = pos;์™€ ๊ฐ™์€ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์€ ๊ฐ€๋…์„ฑ์€ ์ข‹์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ฐ˜๋ณต์ž(Iterator)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ• ๋‹นํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ˆ˜๋งŒ ๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ๋Š” ์ด ์ž‘์€ ์ฐจ์ด๊ฐ€ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒ์„ธ ์„ค๋ช…: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ•ด๋‹น ๋ฐฐ์—ด์˜ Symbol.iterator๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ดํ›„ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด next() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ๊บผ๋‚ด๊ณ  ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ฐ’ ์ ‘๊ทผ์— ๋น„ํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ฐ์ฒด ์ƒ์„ฑ์ด๋ผ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋Š” ์ˆ˜๋งŒ ๋ฒˆ์˜ ๋ฃจํ”„ ๋‚ด์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.
    • ๋‚ด๋ถ€ ๋™์ž‘ ์˜ˆ์‹œ:
    1
    2
    3
    4
    5
    6
    7
    8
    
    // ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ
    const [x, y] = pos;
    
    // ์—”์ง„์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ • (์˜์‚ฌ ์ฝ”๋“œ)
    const iter = pos[Symbol.iterator](); // 1. ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ƒ์„ฑ
    const x = iter.next().value;         // 2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ ๊ฐ’ ํ• ๋‹น
    const y = iter.next().value;         // 3. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ ๊ฐ’ ํ• ๋‹น
    // ์ด ๊ณผ์ •์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํ•จ์ˆ˜ ์‹คํ–‰์ด ๋ฐœ์ƒํ•จ
    
  • ํ•ด๊ฒฐ์ฑ…: ์„ฑ๋Šฅ์ด ๊ทน๋„๋กœ ์ค‘์š”ํ•˜๋‹ค๋ฉด pos[0], pos[1]๊ณผ ๊ฐ™์ด ์ง์ ‘ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค.


4. ์ง€์†์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋Œ€์‹  ์ธ๋ผ์ธ(Inline) ์ง์ ‘ ๊ณ„์‚ฐ

  • ๋ฌธ์ œ์ : ์ž‘์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜(์˜ˆ: ์ขŒํ‘œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” isInside(x, y))๋ฅผ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ์ˆ˜๋งŒ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด, ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์Šคํƒ์— ์Œ“๋Š” โ€˜์˜ค๋ฒ„ํ—ค๋“œโ€™๊ฐ€ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ์ฑ…: ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ ˆ์‹คํ•œ ๊ตฌ๊ฐ„์—์„œ๋Š” ๋กœ์ง์„ ํ•จ์ˆ˜๋กœ ๋นผ์ง€ ์•Š๊ณ  ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ์‹œ:

1
2
3
4
5
// โŒ ๋งค๋ฒˆ ์Šคํƒ ์ƒ์„ฑ
if (isValid(x, y)) { ... }

// โœ… ์ง์ ‘ ์กฐ๊ฑด๋ฌธ ์ž‘์„ฑ
if (x >= 0 && x < n && y >= 0 && y < m) { ... }


5. Array.includes() ๋Œ€์‹  Set.has() ํ™œ์šฉํ•˜๊ธฐ

  • ๋ฌธ์ œ์ : ๋ฐฐ์—ด์˜ includes()๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ€์กฐํ•˜๋Š” ์ „์ฒด ํƒ์ƒ‰(O(N))๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก โ€œ๋ฐฉ๋ฌธ ์—ฌ๋ถ€โ€๋ฅผ ํ™•์ธํ•˜๋Š” ์†๋„๊ฐ€ ๋งค์šฐ ๋А๋ ค์ง‘๋‹ˆ๋‹ค.

  • ํ•ด๊ฒฐ์ฑ…: ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” Set๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. Set.has()๋Š” ๋ฐ์ดํ„ฐ ์–‘๊ณผ ์ƒ๊ด€์—†์ด ์ฆ‰์‹œ ๊ฐ’์„ ์ฐพ๋Š” O(1) ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

    • ์™œ Set์ด ๋” ๋น ๋ฅธ๊ฐ€์š”?: โ€œ๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ง์ ‘ ์ฐธ์กฐโ€๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์•„์ฃผ ๊ณ ๋„ํ™”ํ•ด์„œ ๊ตฌํ˜„ํ•ด ๋†“์€ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ผ์š”!
      1. ํ•ด์‹ฑ(Hasing): ์ž…๋ ฅ๋œ ๊ฐ’์„ ๊ณ ์œ ํ•œ ์ˆซ์ž ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      2. ์ง์ ‘ ์ฐธ์กฐ: ๋ณ€ํ™˜๋œ ์ฃผ์†Œ๋กœ ์ง์ ‘ ์ ํ”„ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
1
2
3
4
5
6
7
8
๐Ÿ“ฆ ๋ฐฐ์—ด (Array): "์ค„ ์„ธ์šฐ๊ธฐ" ๋ฐฉ์‹
๋ฐฐ์—ด์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ 0๋ฒˆ, 1๋ฒˆ, 2๋ฒˆ... ๋ฒˆํ‘œ๋ฅผ ๋ถ™์—ฌ์„œ ์ค„์„ ์„ธ์›๋‹ˆ๋‹ค.
* ์ฐพ๊ธฐ(includes): "์—ฌ๊ธฐ 'apple' ์žˆ๋‹ˆ?"๋ผ๊ณ  ๋ฌผ์œผ๋ฉด, ์ปดํ“จํ„ฐ๋Š” 0๋ฒˆ๋ถ€ํ„ฐ ๋๋ฒˆ๊นŒ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋Œ€์กฐํ•˜๋ฉฐ ๊ฑธ์–ด๊ฐ‘๋‹ˆ๋‹ค. (๋ฐ์ดํ„ฐ๊ฐ€ 10,000๊ฐœ๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ 10,000๋ฒˆ ๊ฑธ์–ด์•ผ ํ•ด์š”.) โ†’ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)

๐Ÿ—บ๏ธ ์„ธํŠธ (Set): "์‚ฌ๋ฌผํ•จ" ๋ฐฉ์‹ (Hash Table)
Set์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ **'ํ•ด์‹œ ํ•จ์ˆ˜'**๋ผ๋Š” ๋งˆ๋ฒ•์˜ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ํ†ต๊ณผ์‹œํ‚ต๋‹ˆ๋‹ค.
* ์ €์žฅ: 'apple'์„ ๋„ฃ์œผ๋ฉด ๊ณ„์‚ฐ๊ธฐ๊ฐ€ "๋„ˆ๋Š” 502๋ฒˆ ์‚ฌ๋ฌผํ•จ์œผ๋กœ ๊ฐ€!"๋ผ๊ณ  ์ฃผ์†Œ๋ฅผ ๋”ฑ ์ •ํ•ด์ค๋‹ˆ๋‹ค.
* ์ฐพ๊ธฐ(has): "์—ฌ๊ธฐ 'apple' ์žˆ๋‹ˆ?"๋ผ๊ณ  ๋ฌผ์œผ๋ฉด, ์ปดํ“จํ„ฐ๋Š” ๋‹ค์‹œ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋Œ๋ ค ๋ฐ”๋กœ 502๋ฒˆ ์‚ฌ๋ฌผํ•จ๋งŒ ์—ด์–ด๋ด…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋Š” ์ณ๋‹ค๋ณด์ง€๋„ ์•Š์ฃ . โ†’ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)


This post is licensed under CC BY 4.0 by the author.

Vue Transition ์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ์ตœ์ƒ์œ„ ํƒœ๊ทธ์—๋งŒ ์ ์šฉ๋œ๋‹ค.

JS fill() vs from()์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ  ์ฐจ์ด