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) { ... }


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

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

-