{"id":44551,"date":"2020-10-07T19:10:32","date_gmt":"2020-10-07T10:10:32","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=44551"},"modified":"2020-10-07T19:10:32","modified_gmt":"2020-10-07T10:10:32","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c%ec%97%90%ec%84%9c-lrucache%eb%a5%bc-%ed%8c%8c%ed%97%a4%ec%b9%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=44551","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c LruCache\ub97c \ud30c\ud5e4\uce58\uae30"},"content":{"rendered":"<h1>LruCache\ub780?<\/h1>\n<p>\uba74\uc811 \ub610\ub294 \ucf54\ub529\ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud754\ud788 \uc811\ud560 \uc218 \uc788\ub294 \uc8fc\uc81c\uac00 \ubc14\ub85c LruCache\ub2e4.<br \/>\n\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\ub294 LruCache\uac00 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\uace0, \uc5b8\uc81c \uadf8\ub9ac\uace0 \uc5b4\ub514\uc11c \uc0ac\uc6a9\ub418\ub294\uc9c0 \ud55c\ubc88 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n<p>LruCache\uc5d0\uc11c Lru\ub780 Least Recently Used(\ucd5c\uadfc\uc5d0 \uac00\uc7a5 \uc801\uac8c \ucc38\uc870\ub428)\uc758 \uc57d\uc790\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc989, LruCache\ub294 \uc81c\ud55c\ub41c \uc0ac\uc774\uc988\uc5d0\uc11c \ucc38\uc870(set or get)\ub41c\uc9c0 \uac00\uc7a5 \uc624\ub798\ub41c \uac1d\uccb4\ub97c \uc81c\uac70\ud558\ub294 \ub370\uc774\ud130\uad6c\uc870\ub2e4. \uadf8\ub7ec\ubbc0\ub85c LruCache\ub97c \uc0ac\uc6a9\ud560\ub54c\ub294 \uc790\uc8fc \ucc38\uc870\ub418\ub294 \uac1d\uccb4\uc77c \uc218\ub85d \ube60\ub974\uac8c \uce90\uc2dc\ub97c \ud1b5\ud574 \uac1d\uccb4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h1><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/10\/www.charlezz.com-lrucache-xlrucache10.png.pagespeed.ic_.sw1s9w-d8m.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/10\/www.charlezz.com-lrucache-xlrucache10.png.pagespeed.ic_.sw1s9w-d8m.png\" alt=\"\" width=\"1004\" height=\"617\" class=\"aligncenter size-full wp-image-44552\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/10\/www.charlezz.com-lrucache-xlrucache10.png.pagespeed.ic_.sw1s9w-d8m.png 1004w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/10\/www.charlezz.com-lrucache-xlrucache10.png.pagespeed.ic_.sw1s9w-d8m-300x184.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/10\/www.charlezz.com-lrucache-xlrucache10.png.pagespeed.ic_.sw1s9w-d8m-768x472.png 768w\" sizes=\"(max-width: 1004px) 100vw, 1004px\" \/><\/a><\/h1>\n<h2>\uac04\ub2e8\ud55c LruCache \uc608\uc81c<\/h2>\n<pre class=\"lang: decode:true\">@Test\r\nfun example1(){\r\n    val cache = LruCache&lt;String,Int&gt;(5) \/\/ maxSize = 5\r\n    \r\n    cache.put(\"A\",0) \/\/[A]\r\n    cache.put(\"B\",0) \/\/[A, B]\r\n    cache.put(\"C\",0) \/\/[A, B, C]\r\n    cache.put(\"D\",0) \/\/[A, B, C, D]\r\n    cache.put(\"E\",0) \/\/[A, B, C, D, E] - A\ubd80\ud130 E\uae4c\uc9c0 \uce90\uc2f1 \uc644\ub8cc\r\n    cache.put(\"F\",0) \/\/[B, C, D, E, F] - F\ub97c \uce90\uc2f1\ud558\uba74, A\ub294 \uc81c\uac70\ub428\r\n    cache.put(\"D\",0) \/\/[B, C, E, F, D] - D\ub97c \ub2e4\uc2dc \uce90\uc2f1\ud558\uba74 \ucd5c\uadfc \ucc38\uc870\ub41c \uc0c1\ud0dc\ub85c \ubcc0\uacbd\r\n    cache.get(\"C\") \/\/[B, E, F, D, C] - C\ub97c \ud1b5\ud574 \uce90\uc2dc\ub41c \ub370\uc774\ud130 \uc811\uadfc\uc2dc \ucd5c\uadfc \ucc38\uc870\ub41c \uc0c1\ud0dc\ub85c \ubcc0\uacbd\r\n}<\/pre>\n<p>\ub2e8\uc77c Int\ud615 \ub9e4\uac1c\ubcc0\uc218\ub97c \uac16\ub294 \uc0dd\uc131\uc790\ub97c \ud1b5\ud574 LruCache \uac1d\uccb4\ub97c \uc0dd\uc131\ud588\ub2e4. \uce90\uc2dc\uc758 \uc0ac\uc774\uc988\ub294 5\ub85c \uc9c0\uc815\ud588\ub2e4.<\/p>\n<p>put(Key, Value) \uba54\uc11c\ub4dc\ub97c \ud1b5\ud574 \uce90\uc2f1\uc744 \uc2dc\ub3c4 \ud560 \uc218 \uc788\ub2e4. \uce90\uc2dc\uc5d0 \uc788\ub294 \ub370\uc774\ud130\ub97c \ucc38\uc870\ud560 \ub54c\ub294 get(Key)\uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<p>put \uba54\uc11c\ub4dc\ub97c \ud1b5\ud574 A\ubd80\ud130 E\uae4c\uc9c0 \ub370\uc774\ud130\ub97c \ub123\uc73c\uba74 \uce90\uc2f1\uc774 \ucc28\uace1\ucc28\uace1 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. (\uc9c0\uae08 \uc608\uc81c\uc5d0\uc11c \uce90\uc2dc\ub418\ub294 \uac12\uc740 \uc758\ubbf8\uac00 \uc5c6\uc73c\ubbc0\ub85c 0\uc73c\ub85c \ud1b5\uc77c\ud588\ub2e4).\u00a0 \uadf8\ub7f0 \ub2e4\uc74c F\ub97c \ud0a4\ub85c \uac16\ub294 6\ubc88\uc9f8\ub97c \uce90\uc2f1\ud558\ub824\uace0 \ud558\uba74 \uce90\uc2dc \uc0ac\uc774\uc988\ub97c \ucd08\uacfc\ud558\ubbc0\ub85c \ucd5c\uadfc\uc5d0 \uac00\uc7a5 \uc801\uac8c \ucc38\uc870\ub41c A\ub97c \uc81c\uac70 \ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \uc774 \ud6c4 \uce90\uc2dc\uc5d0 \uc774\ubbf8 \ud3ec\ud568\ub41c \ud0a4\uc778 D\ub85c \uce90\uc2f1\uc744\ud558\uba74, D\uac00 \uac00\uc7a5 \ucd5c\uadfc\uc5d0 \ucc38\uc870\ub41c \ud0a4\uc774\ubbc0\ub85c \ub0b4\ubd80\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc7ac\ubc30\uc5f4 \ud55c\ub2e4. \uc774\ud6c4 get \uba54\uc11c\ub4dc\ub97c \ud1b5\ud574 \ud0a4\uac00 C\uc778 \uac12\uc744 \uc5bb\uace0\uc790 \ud558\uba74 C\uac00 \uac00\uc7a5 \ucd5c\uadfc\uc5d0 \ucc38\uc870\ub41c \ud0a4\uc774\ubbc0\ub85c \ub2e4\uc2dc \ub0b4\ubd80\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc7ac\ubc30\uc5f4\ud558\uac8c \ub41c\ub2e4.\u00a0<\/p>\n<h2>\uce90\uc2dc\uc758 \uc0ac\uc774\uc988<\/h2>\n<p>\uc55e\uc758 \uc608\uc81c\uc5d0\uc11c\ub294 \uc9c0\uc815\ub41c \uce90\uc2dc \uc0ac\uc774\uc988\ub0b4\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uce90\uc2dc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud588\ub2e4. \uc774\ub54c \ud558\ub098\uc758 \ub370\uc774\ud130\uac00 \uce90\uc2dc\ub420 \ub54c \uce90\uc2dc \uc0ac\uc774\uc988\uac00 1(\uae30\ubcf8\uac12)\uc774\uae30 \ub54c\ubb38\uc5d0 \uc790\ub8cc\uad6c\uc870\uc5d0 \ucd1d 5\uac1c\uc758 \ub370\uc774\ud130\uac00 \uce90\uc2dc\ub418\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc5c8\ub2e4. \uce90\uc2dc\ub418\ub294 \uc0ac\uc774\uc988\ub97c \uc7ac\uc815\uc758 \ud558\uc5ec \uc81c\ud55c\ub41c \uc0ac\uc774\uc988\ub0b4\uc5d0\uc11c \uce90\uc2f1\ud558\ub294 \uac83\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. \ub2e4\uc74c \ub098\uc62c \uc608\uc81c\uc5d0\uc11c\ub294 \uc81c\ud55c\ub41c \uc0ac\uc774\uc988\ub0b4\uc5d0\uc11c Bitmap \uac1d\uccb4\ub97c \uce90\uc2f1\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">int cacheSize = 4 * 1024 * 1024; \/\/ 4MB\r\nLruCache&lt;String, Bitmap&gt; bitmapCache = new LruCache&lt;String, Bitmap&gt;(cacheSize) {\r\n    protected int sizeOf(String key, Bitmap value) {\r\n        return value.getByteCount();\r\n    }\r\n}<\/pre>\n<p>\uce90\uc2dc \uc0ac\uc774\uc988\ub97c 4MB\ub85c \uc9c0\uc815\ud588\ub2e4\uba74 1MB\uc758 Bitmap\uc758 \uacbd\uc6b0 4\uac1c \uce90\uc2f1\ud560 \uc218 \uc788\uace0, 2MB\uc758 Bitmap\uc758 \uacbd\uc6b0 2\uac1c\ub97c \uce90\uc2f1\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4. \ub610\ud55c 1MB\uc9dc\ub9ac 2\uac1c, 2MB\uc9dc\ub9ac 1\uac1c\ub97c \uce90\uc2f1\ud560 \uc218\ub3c4 \uc788\ub2e4. \ube44\ud2b8\ub9f5\uc774 100kb \ub77c\uba74 \uc544\ub9c8 40\uac1c\uc758 Bitmap\uac1d\uccb4\ub97c \uce90\uc2dc\ud560 \uc218\ub3c4 \uc788\ub2e4. (4*1024*1024 \/ (100*1024) = 40.96)<\/p>\n<h2>LruCache \uc2e4\uc0ac\uc6a9 \uc608<\/h2>\n<p>\uc704\uc5d0\uc11c \uc5b8\uae09\ud588\ub4ef\uc774 \uc544\ubb34\ub798\ub3c4 LruCache\ub97c \uc0ac\uc6a9\ud558\ub294 \ub300\ud45c\uc801\uc778 \uc608\uac00 <a href=\"https:\/\/developer.android.com\/topic\/performance\/graphics\/cache-bitmap?hl=ko\">Bitmap\uce90\uc2f1<\/a>\uc774\ub2e4.\u00a0 RecyclerView\uc640 \uac19\uc740 View\uc5d0\uc11c \ub300\ub7c9\uc758 \uc774\ubbf8\uc9c0\ub97c \ud55c\ubc88\uc5d0 \ub85c\ub4dc\ud558\uace0 \uc2a4\ud06c\ub864\ud558\uc5ec \uc7ac\uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 LruCache\uc758 \uc0ac\uc6a9\uc740 \ud37c\ud3ec\uba3c\uc2a4 \uac1c\uc120\uc5d0 \ub9ce\uc740 \ub3c4\uc6c0\uc774 \ub41c\ub2e4. \ub9ce\uc740 Bitmap\uc744 \uba54\ubaa8\ub9ac\uc5d0 \uce90\uc2dc\ud558\ub294 \uac83\uc740 \ubd80\ub2f4\ub420 \uc218 \uc788\uc73c\ubbc0\ub85c <span>DiskLruCache\uc640 \uac19\uc740 \ub514\uc2a4\ud06c \uce90\uc2f1\uc744 \uac19\uc774 \uc0ac\uc6a9\ud558\uba74 \uc880 \ub354 \uba54\ubaa8\ub9ac \ubd80\ub2f4\uc740 \uc904\uc77c \uc218 \uc788\ub2e4. \uc2e4\uc81c\ub85c Bitmap\uce90\uc2f1\uc744 \ucd5c\uc801\ud654\ud558\uc5ec \uc81c\uacf5\ud558\uace0 \uc788\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 <a href=\"https:\/\/github.com\/bumptech\/glide\">Glide<\/a> \uac19\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub2e4.<\/span><\/p>\n<h2>\ub9c8\ubb34\ub9ac\ud558\uba70<\/h2>\n<p>Bitmap \uce90\uc2f1\uc5d0 \uc788\uc5b4\uc11c \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0\ub294 Glide\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \ucd94\ucc9c\ud55c\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uc678\uc758 \uacbd\uc6b0\uc5d0 \ucd5c\uadfc \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uc5d0 \uc788\uc5b4\uc11c \uce90\uc2f1\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 LruCache\uc0ac\uc6a9\uc744 \uace0\ub824\ud560 \uc218 \uc788\uaca0\ub2e4. \ucde8\uc5c5 \ubc0f \uc774\uc9c1\uc744 \uace0\ub824\ud558\uace0 \uc788\ub2e4\uba74, \uc778\ud130\ubdf0 \ubc0f \ucf54\ub529 \ud14c\uc2a4\ud2b8 \ubb38\uc81c\ub85c \uc885\uc885 \ub098\uc624\ub294 \ub0b4\uc6a9\uc774\ub2c8 \uc9c1\uc811 LruCache \uc790\ub8cc\uad6c\uc870\ub97c \uad6c\ud604\ud574\ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n<p><iframe loading=\"lazy\" width=\"480\" height=\"480\" src=\"https:\/\/giphy.com\/embed\/ZUOlQXqO0qbAI\" frameborder=\"0\" class=\"giphy-embed\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>LruCache\ub780? \uba74\uc811 \ub610\ub294 \ucf54\ub529\ud14c\uc2a4\ud2b8\uc5d0\uc11c \ud754\ud788 \uc811\ud560 \uc218 \uc788\ub294 \uc8fc\uc81c\uac00 \ubc14\ub85c LruCache\ub2e4. \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c\ub294 LruCache\uac00 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\uace0, \uc5b8\uc81c \uadf8\ub9ac\uace0 \uc5b4\ub514\uc11c \uc0ac\uc6a9\ub418\ub294\uc9c0 \ud55c\ubc88 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uc790. LruCache\uc5d0\uc11c Lru\ub780 Least Recently Used(\ucd5c\uadfc\uc5d0 \uac00\uc7a5 \uc801\uac8c \ucc38\uc870\ub428)\uc758 \uc57d\uc790\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc989, LruCache\ub294 \uc81c\ud55c\ub41c \uc0ac\uc774\uc988\uc5d0\uc11c \ucc38\uc870(set or get)\ub41c\uc9c0 \uac00\uc7a5 \uc624\ub798\ub41c \uac1d\uccb4\ub97c \uc81c\uac70\ud558\ub294 \ub370\uc774\ud130\uad6c\uc870\ub2e4. \uadf8\ub7ec\ubbc0\ub85c LruCache\ub97c \uc0ac\uc6a9\ud560\ub54c\ub294 \uc790\uc8fc \ucc38\uc870\ub418\ub294 \uac1d\uccb4\uc77c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44551"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44551"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44551\/revisions"}],"predecessor-version":[{"id":44553,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44551\/revisions\/44553"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}