Java

[Effective Java] ์•„์ดํ…œ 33. ํƒ€์ž… ์•ˆ์ • ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•˜๋ผ.

quedevel 2023. 3. 21. 10:08
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽฏ ์•„์ดํ…œ 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=

728x90
๋ฐ˜์‘ํ˜•