ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Building a Smart LRU Cache in Java: When Machines Mimic Human Memory ๐Ÿง ๐Ÿ’ป
Dev.toDev.to
Database

HashMap๊ณผ Doubly Linked List ๊ฒฐํ•ฉ์„ ํ†ตํ•œ O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ LRU Cache ๊ตฌํ˜„

Building a Smart LRU Cache in Java: When Machines Mimic Human Memory ๐Ÿง ๐Ÿ’ป

Furkan Kurtaran2026๋…„ 5์›” 21์ผ3๋ถ„intermediate

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 ์กฐํ•ฉ ๊ณ ๋ ค - ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์ด์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์šฐ์„ ์ˆœ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

์›๋ฌธ ์ฝ๊ธฐ