item 44 sijun - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
๋๋ค๋ฅผ ์ง์ํ๋ฉด์ ์์ ํด๋์ค์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด ์ํ๋ ๋์์ ๊ตฌํํ๋ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ด ์ ์ ํํฐ๋ฆฌ๋ ์์์๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์ฒด๋์ด ๊ฐ๋ค.
LinkedHashMap
์ removeEldestEntry
๋ฅผ ์๋ก ๋ณด์. ์๋์ฒ๋ผ ์ฌ์ ์ํ ๊ฒฝ์ฐ, ๋งต์ ์๋ก์ด entry๊ฐ ์ถ๊ฐ๋ ๋, ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ true๊ฐ ๋ฐํ๋๋ฉด ๊ฐ์ฅ ์ค๋๋ ์์๋ฅผ ์ ๊ฑฐํ๋ค. ์ฆ, ๊ฐ์ฅ ์ต๊ทผ 100๊ฐ๋ฅผ ์ ์งํ๊ฒ ๋๋ค.
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return size() > 100;
}
์ ๋์ํ์ง๋ง ๋๋ค๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ ํด๋ผ ์ ์๋ค. LinkedHashMap
์ ์ค๋๋ ๋ค์ ๊ตฌํํ๋ค๋ฉด ํจ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ์ ์ ํฉํฐ๋ฆฌ๋ ์์ฑ์๋ฅผ ์ ๊ณตํ์ ๊ฒ์ด๋ค. ์๋ฅผ๋ค์ด ํจ์ํ ์ธํฐํ์ด์ค๋ ๋ค์์ฒ๋ผ ์ ์ธํ ์ ์๋ค.
@FunctionalInterface interface EldestEntryRemovalFunction<K,V>{
boolean remove(Map<K,V> map, Map.Entry<K,V> eldest);
}
ํ์ง๋ง, ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตณ์ด ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ์๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฏธ ๊ฐ์ ๋ชจ์์ ์ธํฐํ์ด์ค๊ฐ ์ค๋น๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
java.util.function ํจํค์ง์๋ ์ด 43๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ๋ด๊ฒจ ์๋ค. ๋ค ๊ธฐ์ตํ๊ธด ์ด๋ ต๊ณ , 6๊ฐ๋ง ๊ธฐ์ตํ๋ฉด ๋๋จธ์ง๋ฅผ ์ถฉ๋ถํ ์ ์ถํด ๋ผ ์ ์๋ค.
- UnaryOperator / T apply(T t) / String::toLowerCase : ๋ฐํ๊ฐ๊ณผ ์ธ์์ ํ์ ์ด ๊ฐ์ ํจ์
- BinaryOperator / T apply(T t1, T t2) / BigInteger::add : ๋ฐํ๊ฐ๊ณผ ์ธ์ 2๊ฐ์ ํ์ ์ด ๊ฐ์ ํจ์
- Predicate / boolean test(T t) / Collection::isEmpty : boolean์ ๋ฐํํ๋ ํจ์
- Function<T,R> / R apply(T t) / Arrays.asList : ์ธ์์ ๋ฐํ ํ์ ์ด ๋ค๋ฅธ ํจ์
- Supplier / T get() / Instant:now : ์ธ์ ์์ด ๊ฐ์ ๋ฐํํ๋ ํจ์
- Consumer / void accept(T t) / System.out::println : ๋ฐํ ๊ฐ์ ์๊ณ ์ธ์๊ฐ ์๋ ํจ์
๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ ํ์ ์ธ int, long, double์ฉ์ผ๋ก ๊ฐ 3๊ฐ์ฉ ๋ณํ์ด ์๊ฒจ๋๋ค. ์๋ฅผ๋ค์ด int๋ฅผ ๋ฐ๋ Predicate๋ IntPredicate๊ฐ ๋๋ค.
์ EldestEntryRemovalFunction
์ java.util.function ํจํค์ง์ ์ ์๋ BiPredicate๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํ์ง๋ง ์ง์ ์์ฑ์ด ๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ๋๋ ์๋ค. ์๋ฅผ๋ค์ด Comparator ์ธํฐํ์ด์ค๋ ๊ตฌ์กฐ์ ์ผ๋ก ToIntBiFunction<T,U>์ ๋์ผํ๋ค. ํ์ง๋ง, Comparator๊ฐ ๋ ์์ ์ธ ์ธํฐํ์ด์ค๋ก ์ด์๋จ์ ์ป๋ ์ฅ์ ์ด ์๋ค.
- ์ด๋ฆ์ด ๊ทธ ์ฉ๋๋ฅผ ๋ช ํํ ์ค๋ช ํด์ค๋ค.
- ๊ตฌํํ๋ ์ชฝ์์ ๋ฐ๋์ ์ง์ผ์ผ ํ ๊ท์ฝ์ ๋ด๊ณ ์๋ค.
- ๋น๊ต์๋ค์ ๋ณํํ๊ณ ์กฐํฉํด์ฃผ๋ ์ ์ฉํ ๋ํดํธ ๋ฉ์๋๋ฅผ ๋ด๊ณ ์๋ค.
์์ ๊ฐ์ ์กฐ๊ฑด๋ค์ ๋ง์กฑํ๋ค๋ฉด, ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ค.
์ง์ ์์ฑํ๋ค๋ฉด, @FunctionalInteface
์ ๋ํ
์ด์
์ ํตํด ์ง์ ๋ง๋ ํจ์ํ ์ธํฐํ์ด์ค๋ผ๊ณ ์๋ ค์ฃผ์ด์ผ ํ๋ค.