๐Ÿ“–TIL - "์™€.. ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜๋„ ์žˆ๊ตฌ๋‚˜!" Map, Set, reduce ์‹ค์ „ ํ™œ์šฉ๊ธฐ ๐Ÿคฏ

์Š˜ยท2025๋…„ 1์›” 16์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
27/90

๐Ÿ“Œ ์˜ค๋Š˜์˜ ๋„์ „ ๊ณผ์ œ

์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ์ถ”์ ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
(login, viewPage, logout ๊ฐ™์€ ํ–‰๋™๋“ค์„ ์ค‘๋ณต ์—†์ด ๊ธฐ๋กํ•˜๊ธฐ!)

์ฒ˜์Œ์—๋Š” ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ... Map๊ณผ Set์„ ํ™œ์šฉํ•˜๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ๋์–ด์š”!

๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

1. ์‚ฌ์šฉ์ž ๋กœ๊น… ์‹œ์Šคํ…œ ๋งŒ๋“ค๊ธฐ

function createUserLogger() {
  const userLogs = new Map();  // ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ก์„ ๊ด€๋ฆฌํ•  Map ์ƒ์„ฑ!

  function recordUserAction(userId, action) {
    if(!userLogs.has(userId)) {
      userLogs.set(userId, new Set());  // Set์œผ๋กœ ์ค‘๋ณต ๊ธฐ๋ก ๋ฐฉ์ง€
    }
    const actions = userLogs.get(userId);
    actions.add(action);
  }

  function getUserActions(userId) {
    const actions = userLogs.get(userId);
    return actions ? [...actions] : [];
  }

  return { recordUserAction, getUserActions };
}

2. reduce์˜ ์‹ ๊ธฐํ•œ ํ™œ์šฉ๋ฒ• ๋ฐœ๊ฒฌ!

// ์š”์†Œ ๋“ฑ์žฅ ํšŸ์ˆ˜ ์„ธ๊ธฐ
arr.reduce((acc, cur) => {
  acc[cur] = (acc[cur] || 0) + 1;  // ์ด ๋ถ€๋ถ„์ด ์ •๋ง ์‹ ๊ธฐํ–ˆ์–ด์š”!
  return acc;
}, {});

๐Ÿ” ์ฝ”๋“œ ๋Œ์•„๋ณด๊ธฐ

reduce๋กœ ๋ฐฐ์—ด โ†’ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

์˜ค๋Š˜์˜ ๊ฐ€์žฅ ํฐ ๊นจ๋‹ฌ์Œ์ด์—ˆ๋˜ ๋ถ€๋ถ„! ๐Ÿ˜ฒ

acc[cur] = (acc[cur] || 0) + 1

์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ–ˆ์„ ๋•Œ์˜ ๊ทธ ํฌ์—ด์ด๋ž€...!

  1. ์ฒ˜์Œ 'banana' ๋“ฑ์žฅ

    • acc['banana']๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ undefined
    • undefined || 0 โ†’ 0์ด ๋˜๊ณ 
    • ์—ฌ๊ธฐ์— + 1 ํ•ด์„œ 1์ด ์ €์žฅ!
  2. 'melon' ๋‘ ๋ฒˆ์งธ ๋“ฑ์žฅํ•  ๋•Œ๋Š”

    • acc['melon']์ด ์ด๋ฏธ 1
    • 1 || 0 โ†’ 1
    • ์—ฌ๊ธฐ์— + 1 ํ•ด์„œ 2๊ฐ€ ๋จ

์™€... ์ •๋ง ์งง์€ ์ฝ”๋“œ์˜€์ง€๋งŒ ์ด๋ ‡๊ฒŒ๋‚˜ ๋ฉ‹์ง„ ๋™์ž‘์„ ํ•œ๋‹ค๋‹ˆ... ๐Ÿฅน

โœจ ์˜ค๋Š˜์˜ ๊นจ๋‹ฌ์Œ

  1. Map๊ณผ Set์ด ์ด๋Ÿด ๋•Œ ์ง„๊ฐ€๋ฅผ ๋ฐœํœ˜ํ•˜๋Š”๊ตฌ๋‚˜

    • ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ Set์ด ์ตœ๊ณ !
    • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ๋Š” Map์ด ๋”ฑ!
  2. reduce๋Š” ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•˜๋‹ค

    • undefined๋ฅผ ์ด์šฉํ•œ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด๋ผ๋‹ˆ...
    • ์ด๋Ÿฐ ๊ฒŒ ์ง„์ •ํ•œ JavaScript์˜ ๋ฌ˜๋ฏธ์ธ ๊ฒƒ ๊ฐ™์•„์š”

๐Ÿš€ ํŠนํžˆ ๋งˆ์Œ์— ๋“  ์ 

  • ์ฝ”๋“œ๊ฐ€ ์งง์œผ๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•ด์š”
  • undefined๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ •๋ง ๋˜‘๋˜‘ํ•œ ๊ฒƒ ๊ฐ™์•„์š”
  • ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ๋” ๊ธฐ์ฉ๋‹ˆ๋‹ค!

โญ๏ธ ์ฐธ๊ณ  ์ž๋ฃŒ

์˜ค๋Š˜๋„ ํ•˜๋‚˜ ๋ฐฐ์›Œ๊ฐ‘๋‹ˆ๋‹ค. ๊ฐ’์ด ์—†๋Š” ์ ์„ ์ด์šฉํ•˜์—ฌ 0์œผ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ!
JavaScript๋Š” ๋ฐฐ์šธ์ˆ˜๋ก ๋” ์žฌ๋ฏธ์žˆ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์š” โœจ

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

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