-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Utility FunctionUtility Function ImplementationUtility Function Implementation
Description
๋ฌธ์ ์ค๋ช | Memoize ํจ์ ๊ตฌํ
ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ๋์ผํ ์ธ์๋ก ํจ์๊ฐ ๋ค์ ํธ์ถ๋ ๋ ์ด์ ์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ memoize ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
๐ ์ ์ฝ์กฐ๊ฑด
- ํจ์๋ ์ด๋ค ํ์ ์ ์ธ์๋ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํจ
- ์บ์๋ ๋์ผํ ์ธ์์ ๋ํด ํจ์๋ฅผ ํ ๋ฒ๋ง ํธ์ถํ๋๋ก ํด์ผ ํจ
- ์บ์ ํค๋ ๋ชจ๋ ์ธ์๋ฅผ ๊ณ ๋ คํด์ผ ํจ
๐ก ์์
- Input:
let callCount = 0; const times10 = (n) => { callCount++; return n * 10; }; const memoized = memoize(times10); memoized(5); // ์ฒซ ๋ฒ์งธ ํธ์ถ memoized(5); // ๋ ๋ฒ์งธ ํธ์ถ
- Output:
- ์ฒซ ๋ฒ์งธ ํธ์ถ: 50 (๊ณ์ฐ๋จ)
- ๋ ๋ฒ์งธ ํธ์ถ: 50 (์บ์์์ ๊ฐ์ ธ์ด)
- callCount: 1 (ํจ์๋ ํ ๋ฒ๋ง ํธ์ถ๋จ)
- Output:
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
Step 1: ๋ฌธ์ ์ดํดํ๊ธฐ
- ์์ ์์๋ก memoize ๊ธฐ๋ฅ ์ดํดํ๊ธฐ
times10(5)ํจ์๋ฅผ memoize๋ก ๊ฐ์ธ๋ฉด, ์ฒซ ๋ฒ์งธ ํธ์ถ์๋ง ์ค์ ๊ณ์ฐ์ด ์ผ์ด๋๊ณ ์ดํ์๋ ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ- ๋ค๋ฅธ ์ธ์(์: 6)๊ฐ ๋ค์ด์ค๋ฉด ์๋ก ๊ณ์ฐํด์ผ ํจ
Step 2: ์ ๊ทผ ๋ฐฉ๋ฒ
-
์ง๊ด์ ์ผ๋ก ์๊ฐํ๊ธฐ
- ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์บ์(Map)๊ฐ ํ์ํจ
- ์ธ์๋ฅผ ํค๋ก ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํด์ผ ํจ
- ๊ฐ์ฒด ํ์ ์ธ์๋ ์ฒ๋ฆฌํ๊ธฐ ์ํด JSON.stringify๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ ์์ฑ
-
์๊ณ ๋ฆฌ์ฆ ํ ์์ฑ
1. ์บ์ ๊ฐ์ฒด ์์ฑ (Map) 2. ์ ํจ์ ๋ฐํ (ํด๋ก์ ํ์ฉ) 3. ํธ์ถ ์: โ ์ธ์๋ค์ ๋ฌธ์์ด ํค๋ก ๋ณํ โ ์บ์์ ํค๊ฐ ์๋์ง ํ์ธ โ ์๋ค๋ฉด -> ์บ์๋ ๊ฒฐ๊ณผ ๋ฐํ ์๋ค๋ฉด -> ์๋ณธ ํจ์ ํธ์ถ, ๊ฒฐ๊ณผ ์บ์์ ์ ์ฅ ํ ๋ฐํ
Step 3: ์ฝ๋ ์ค๊ณ
- ์บ์๋ฅผ ์ ์ฅํ Map ๊ฐ์ฒด ์์ฑ
- ์๋ณธ ํจ์๋ฅผ ์ฐธ์กฐํ๋ ์๋ก์ด ํจ์ ๋ฐํ
- ์ ํจ์์์:
- ์ธ์๋ค์ JSON.stringify๋ก ๋ฌธ์์ด ํค๋ก ๋ณํ
- ์บ์์์ ํค ๊ฒ์
- ์์ผ๋ฉด ์บ์๋ ๊ฒฐ๊ณผ ๋ฐํ
- ์์ผ๋ฉด ์๋ณธ ํจ์ ํธ์ถํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅ
Step 4: ์ฝ๋ ๊ตฌํ
const memoize = (func) => {
const cache = new Map()
return function(...args) {
const key = JSON.stringify(args)
if(cache.has(key)){
return cache.get(key)
}
const result = func.apply(this, args)
cache.set(key, result)
return result
}
};Metadata
Metadata
Assignees
Labels
Utility FunctionUtility Function ImplementationUtility Function Implementation