provided 3. Supplier

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

SupplierλŠ” μ•„λ¬΄λŸ° 인자λ₯Ό λ°›μ§€ μ•Šκ³  T νƒ€μž…μ˜ 객체λ₯Ό λ¦¬ν„΄ν•œλ‹€.

λžŒλ‹€μ‹μœΌλ‘œλŠ” () β†’ T 둜 ν‘œν˜„ν•œλ‹€.

κ³΅κΈ‰μžλΌλŠ” μ΄λ¦„μ²˜λŸΌ 암무것도 λ°›μ§€ μ•Šκ³  νŠΉμ • 객체λ₯Ό λ¦¬ν„΄ν•œλ‹€.

  • "νŠΉμ • 객체λ₯Ό λ¦¬ν„΄ν•œλ‹€." κ°€ κ°€μž₯ 포인트라고 μƒκ°ν•œλ‹€.

μž…λ ₯을 λ°›κ³ , μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ λ‹€μ‹œ μž…λ ₯을 λ°›λŠ” methodλ₯Ό κ΅¬ν˜„ ν•˜κ³ λ‚˜μ„œ μ€‘λ³΅λœ 둜직이 λˆˆμ— 보인닀.

private PurchaseMoney initPurchaseMoney() {
    PurchaseMoney purchaseMoney;

    while (true) {
        try {
            int inputMoney = inputView.inputPurchaseMoneyOfLotto();
            purchaseMoney = new PurchaseMoney(inputMoney);
            break;
        } catch (IllegalArgumentException ex) {
            outputView.outputErrorMessage(ex);
        }
    }
    return purchaseMoney;
}

private WinningLotto initWinningNumbers() {
    WinningLotto winningLotto;

    while (true) {
        try {
            List<Integer> input = inputView.inputWinningNumbers();
            Lotto lotto = new Lotto(input);
            winningLotto = new WinningLotto(new Lotto(input));
            break;
        } catch (IllegalArgumentException ex) {
            outputView.outputErrorMessage(ex);
        }
    }
    System.out.println();
    return winningLotto;
}

private Bonus initBonusNumber(WinningLotto winningLotto) {
    Bonus bonus;

    while (true) {
        try {
            bonus = new Bonus(new Number(inputView.inputBonusNumber()), winningLotto);
            break;
        } catch (IllegalArgumentException ex) {
            outputView.outputErrorMessage(ex);
        }
    }
    return bonus;
}

// 호좜
int inputMoney = inputView.inputPurchaseMoneyOfLotto();
PurchaseMoney purchaseMoney = initPurchaseMoney();

PersonLotto personLotto = initPersonLotto(generate, purchaseMoney);
WinningLotto winningLotto = initWinningNumbers();

int inputBonusNumber = inputView.inputBonusNumber();
Bonus bonus = initData(() -> new Bonus(new Number(inputBonusNumber), winningLotto));

ν•΄λ‹Ή λ©”μ†Œλ“œλ“€μ€ λ°˜ν™˜ 객체λ₯Ό μ „λΆ€ κ°€μ§€κ³ μžˆλ‹€.

Supplierλ₯Ό μ μš©ν•΄μ„œ λ¦¬νŒ©ν† λ§μ„ ν•΄λ³΄μž.

λ³€κ²½ ν›„μ—λŠ” λˆˆμ— 거슬렸던 μ€‘λ³΅λœ μ½”λ“œλ“€μ΄ 사라지고 λ‚˜μ€‘μ— μœ μ§€ 보수 λ˜ν•œ νš¨μœ¨μ μ΄λΌλŠ” 생각이 λ“€μ—ˆλ‹€.

Last updated