ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toDatabase
์๋ฌธ ์ฝ๊ธฐ
HashMap๊ณผ Doubly Linked List ๊ฒฐํฉ์ ํตํ O(1) ์๊ฐ ๋ณต์ก๋์ LRU Cache ๊ตฌํ
Building a Smart LRU Cache in Java: When Machines Mimic Human Memory ๐ง ๐ป
AI ์์ฝ
Context
๋ฐฑ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌผ๋ฆฌ์ ์ ๊ทผ ์๋ ํ๊ณ๋ก ์ธํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ์. ํ์ ๋ Cache ๋ฉ๋ชจ๋ฆฌ ์์ ๋ด์์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ง ๋ฐ ์ญ์ ์ ๋ต์ด ํ์ํ ์ํฉ.
Technical Solution
- ๋ฐ์ดํฐ ์กฐํ ์๋ ์ต์ ํ๋ฅผ ์ํด Key-Value ์์ ์ ์ฅํ๋ HashMap ๋์
- ๋ฐ์ดํฐ์ ์๊ฐ์ ์์๋ฅผ ์ถ์ ํ๊ณ ๋น๋ฒํ ์์น ๋ณ๊ฒฝ์ ์ง์ํ๋ Doubly Linked List ๊ตฌ์กฐ ์ค๊ณ
- HashMap์ ๋น ๋ฅธ Lookup ๊ธฐ๋ฅ๊ณผ Linked List์ ์์ ์ ์ด ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ์ํคํ ์ฒ ๊ตฌ์ถ
- ๋ฐ์ดํฐ ์ ๊ทผ ์ ํด๋น ๋ ธ๋๋ฅผ ์ฆ์ Head ์์น๋ก ์ด๋์์ผ Most Recently Used ์ํ ์ ์ง
- ๋ฉ๋ชจ๋ฆฌ ์๊ณ์น ๋๋ฌ ์ Tail ๋ ธ๋๋ฅผ ์ฆ์ ์ญ์ ํ๋ Eviction ์ ์ฑ ์ ํตํ ๊ณต๊ฐ ํ๋ณด
- ํฌ์ธํฐ ์กฐ์์ ํตํ ๋ ธ๋ ์ด๋ ๋ฐ ์ญ์ ๋ก์ง ๊ตฌํ์ผ๋ก ๋ชจ๋ ์์ ์ O(1) ์๊ฐ ๋ณต์ก๋ ๋ฌ์ฑ
์ค์ฒ ํฌ์ธํธ
- ๋ฐ์ดํฐ ์ ๊ทผ ๋น๋์ ์ต์ ์ฑ์ด ์ค์ํ ์์คํ ์์ LRU Eviction ์ ์ฑ ๊ฒํ - ๋น ๋ฅธ ์กฐํ(Search)์ ๋น๋ฒํ ์์ ๋ณ๊ฒฝ(Re-ordering)์ด ๋์์ ํ์ํ ๊ฒฝ์ฐ HashMap๊ณผ Linked List ์กฐํฉ ๊ณ ๋ ค - ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์ฌํญ์ ์ ์ํ๊ณ ์ด์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ญ์ ์ฐ์ ์์ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ