ITEM 5: Dependency Injection

๋งŽ์€ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž์›์— ์˜์กดํ•œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง€๋Š” ํด๋ž˜์Šค(ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž์›์— ์˜์กด)์—๋Š” ์ •์  ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋‚˜ ์‹ฑ๊ธ€ํ„ด ๋ฐฉ์‹์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž์— ํ•„์š”ํ•œ ์ž์›์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด, ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ž์› ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์›ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์˜ ํ•œ ํ˜•ํƒœ๋กœ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

public class SpellChecker {
    private final Lexicon dictionayr;

    public SpellChecker(Lexicon dictionary){
        // null์ด๋ฉด NPE ์•„๋‹Œ๊ฒฝ์šฐ objects ๋ฐ˜ํ™˜
        this.dictionary = Objects.requireNonNull(dictionary);
    }

    public boolean isValid(String word){}
}

์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ํ•œ๊ฐœ์˜ ์ž์›๋งŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ž์›์ด ๋ช‡ ๊ฐœ๋“  ์˜์กด ๊ด€๊ณ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋“  ์ž˜ ์ž‘๋™ํ•œ๋‹ค. ๋ถˆ๋ณ€์„ ๋ณด์žฅํ•˜์—ฌ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜์กด ๊ฐ์ฒด๋ฅผ ์•ˆ์‹ฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์€ ์ƒ์„ฑ์ž, ์ •์  ํŒฉํ„ฐ๋ฆฌ, Builder ๋ชจ๋‘์— ๋˜‘๊ฐ™์ด ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Factory๋ž€ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•˜๋Š”๋ฐ, Factory Method Pattern์€ ์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ํŒจํ„ด์„ ์‘์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

Supplier<T> ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํŒฉํ„ฐ๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•œ ์™„๋ฒฝํ•œ ์˜ˆ์‹œ์ด๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ๋ช…์‹œํ•œ ํƒ€์ž…์˜ ํ•˜์œ„ ํƒ€์ž…์ด๋ผ๋ฉด ๋ฌด์—‡์ด๋“  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํŒฉํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

Mosaic create(Supplier<? extends Tile> tileFactory) { ... }

์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์ด ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ฐœ์„ ํ•ด์ฃผ์ง€๋งŒ, ์˜์กด์„ฑ์ด ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์–ด์ง€๋Ÿฝ๊ฒŒ ํ•˜๋ฉฐ, ์Šคํ”„๋ง ๊ฐ™์€ ์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ์˜ ์–ด์ง€๋Ÿฌ์›€์„ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated

Was this helpful?