๐ฏ ์์ดํ 33. ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ฅผ ๊ณ ๋ คํ๋ผ.
โญ ์ด์ข ์ปจํ ์ด๋ ํจํด(type safe heterogeneous container) click here.
์ปฌ๋ ์ API๋ก ๋ํ๋๋ ์ผ๋ฐ์ ์ธ ์ ๋ค๋ฆญ ํํ์์๋ ํ ์ปจํ ์ด๋๊ฐ ๋ค๋ฃฐ ์ ์๋ ํ์ ๋งค๊ฐ๋ณ์์ ์๊ฐ ๊ณ ์ ๋์ด ์๋ค. ํ์ง๋ง ์ปจํ ์ด๋ ์์ฒด๊ฐ ์๋ ํค๋ฅผ ํ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊พธ๋ฉด ์ด๋ฐ ์ ์ฝ์ด ์๋ ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ฅผ ๋ง๋ค ์ ์๋ค. ํ์ ์์ ์ด์ข ์ปจํ ์ด๋๋ Class๋ฅผ ํค๋ก ์ฐ๋ฉฐ, ์ด๋ฐ ์์ผ๋ก Class ๊ฐ์ฒด๋ฅผ ํ์ ํ ํฐ์ด๋ผ ํ๋ค. ๋ํ, ์ง์ ๊ตฌํํ ํค ํ์ ๋ ์ธ ์ ์๋ค. ์์ปจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ ํํํ DatabaseRow ํ์ ์๋ ์ ๋ค๋ฆญ ํ์ Column๋ฅผ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
public class Favorites {
// ์ฝ๋ 33-3 ํ์
์์ ์ด์ข
์ปจํ
์ด๋ ํจํด - ๊ตฌํ (200์ชฝ)
private Map<Class<?>, Object> favorites = new HashMap<>();
// public <T> void putFavorite(Class<T> type, T instance) {
// favorites.put(Objects.requireNonNull(type), instance);
// }
public <T> T getFavorite(Class<T> type) {
return type.cast(favorites.get(type));
}
// ์ฝ๋ 33-4 ๋์ ํ๋ณํ์ผ๋ก ๋ฐํ์ ํ์
์์ ์ฑ ํ๋ณด (202์ชฝ)
public <T> void putFavorite(Class<T> type, T instance) {
favorites.put(Objects.requireNonNull(type), type.cast(instance));
}
// ์ฝ๋ 33-2 ํ์
์์ ์ด์ข
์ปจํ
์ด๋ ํจํด - ํด๋ผ์ด์ธํธ (199์ชฝ)
public static void main(String[] args) {
Favorites f = new Favorites();
f.putFavorite(String.class, "Java");
f.putFavorite(Integer.class, 0xcafebabe);
f.putFavorite(Class.class, Favorites.class);
String favoriteString = f.getFavorite(String.class);
int favoriteInteger = f.getFavorite(Integer.class);
Class<?> favoriteClass = f.getFavorite(Class.class);
System.out.printf("%s %x %s%n", favoriteString,
favoriteInteger, favoriteClass.getName());
}
}
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=