title
νμ¬ λ΄κ° μ¬μ©νλ README μ΄μμ λ€μκ³Ό κ°λ€. λλ¨Έμ§λ λ무 λΉμ°ν λ§μ΄κ³ , μλ리μ€λΌλ κ²μ μ μ°¨μ νλ‘κ·Έλλ°κ³Ό κ±°μ κ°μ λ§μ΄λ€. μ΄λ² ν¬μ€νΈ λ΄μ©μ μ΄μ μ§μ€ν΄μ λ΄ μκ°μ μμ±ν΄λ³΄λ € νλ€.
# java-precourse
## 1. μλ리μ€λ‘ λ¬Έμ λ₯Ό νννλ€.
- νλμ λ¬Έμ λ νλμ μλ리μ€λ‘ ννλλ€.
- νμ¬λ μ‘΄μ¬νμ§ μλ μ½λλ₯Ό μμ±νλ©°, IDEμ μμ±/리ν©ν λ§ κΈ°λ₯μ νμ©νμ¬ λΌλλ₯Ό λ§λ λ€.
## 2. μ
μΆλ ₯ νμμ μ μνλ€.
- μ
λ ₯ λ¬Έμμ΄μμ μ΄λ€ νμμ μ 보λ₯Ό μΆμΆν΄μΌ νλκ°?
- νλ©΄ μΆλ ₯μ νμν νμμ μ 보λ 무μμΈκ°?
## 3. λ¬Έμ λ₯Ό κ°μ₯ λ¨μνκ² ν΄κ²°ν μ μλ λ°©λ²μ μκ°νλ€.
- **κ°μ₯ ν볡ν μν©**λΆν° μμνλ€.
- μ£ΌμμΌλ‘ κ³ μμ€ λ¬Έλ§₯μ μ½λμ μ λλ€.
- νμ μ΄ μλ λΆλΆλΆν° ν
μ€νΈνλ€.
## 4. μꡬμ¬ν λ¬Έμλ₯Ό μ½μ΄λ³΄κ³ μ κ²νλ€.
- μꡬμ¬νμ λμ³€μ κ°λ₯μ±μ μΌλμ λλ€.
- ν
μ€νΈλ‘ μ μ ν ννλμλμ§ κΈ°λ‘ν΄λκ³ μ°Έκ³ νμ.
ꡬνν΄λ³΄λ©΄μ λλ μ μ μ ν μκ°μ μ€μνλ©΄μ μλ¦λ€μ΄ TDDλ₯Ό μννκΈ°μλ λ΄ κ°λ° μ€λ ₯μ΄ μμ§ λΆμ‘±νλ€λ κ²μ΄λ€. κ·Έλμ λ΄ νκ³λ₯Ό μΈμ νκ³ , μ€μν κ²μ μ§μ€νλ λ°©μμΌλ‘ μ ννλ€. κ·Έλ λ€κ³ κ°μ₯ μ΄λ €μΈ κ² κ°μ κΈ°λ₯λΆν° ꡬννλ λ°©μμΌλ‘ μμνμ§λ μλλ€. λλ λ¬Έμ λ₯Ό ==μλ리μ€λ‘ μ μνλ κ²==λΆν° μμνλ€.
μλ리μ€λ‘ λ¬Έμ λ₯Ό νννλ κ²μ μ€κ³ μμ΄λ ꡬνμ κ°λ₯νκ² νλ€. μΌλ° μΈμ΄λ³΄λ€ νλ‘κ·Έλλ° μΈμ΄κ° λ νΈν λ΄κ²λ μ΄ λ°©λ²μ΄ λ μ’κ² λκ»΄μ‘λ€. λͺ¨λ λΆμ κ²°κ³Όλ₯Ό λ¬Έμμ μ₯ν©νκ² λμ΄λμ§ μμ μ μλ€λ μ μ΄ μ’μλ€. λ¬Έμνλ₯Ό μ΅μννκ³ μ£Όμκ³Ό μ½λλ₯Ό νμ©νλ κ²μ΄ νΈνκ² λκ»΄μ‘λ€.
λ€μμ μ²μμΌλ‘ vendingmachine λ¬Έμ λ₯Ό ν΄κ²°νμ λ λ΄κ° μμ±νλ μλ리μ€μ λ΄μ©μ΄λ€. μλ³Έμ μ΄ μΈ κ°μ νμΌλ‘ λλμ΄μ Έ μμ§λ§, 보기 μ’κ² νλλ‘ ν©μ³€λ€. GitHub λ§ν¬
exceptionHandler.tryUntilValid(() -> {
int money = inputView.readInitialVendorMoney();
vendor.vendorDepositBalance(money);
});
var balance = vendor.getVendorCurrentBalance();
outputView.printCurrentVendorMoney(balance);
exceptionHandler.tryUntilValid(() -> {
var items = inputView.readInitialVendorItems();
vendor.addStocks(items);
});
exceptionHandler.tryUntilValid(() -> {
int money = inputView.readInitialUserMoney();
vendor.userDepositBalance(money);
});
while (true) {
int balance = vendor.getUserCurrentBalance();
outputView.printCurrentUserMoney(balance);
if (!vendor.canUserPurchase()) {
break;
}
purchaseItem();
}
var balance = vendor.userWithdrawBalance();
outputView.printRemainingUserMoney(balance);
μ΅μ΄μ μ΄ μ½λλ₯Ό μμ±ν μ΄ν, λ μ΄ μ½λλ₯Ό μμ ν μ μ΄ κ±°μ μλ€. (λ―Έλ¬ν λμμ€ λλ¬Έμ ν¨μ μ΄λ¦ λ°κΎΌ μ λ?) ν΅μ¬μ Vendor vendorλΌλ λ³μλ₯Ό μ λ¬λ°λλ€λ κ°μ μμ μμνμ¬, ==μ‘΄μ¬νμ§ μλ μ½λλ₯Ό μμ±νλ©° νλ‘κ·Έλ¨ μ 체 μ€κ³λ₯Ό μμ±ν μ μμλ€==λ κ²μ΄λ€. λ§μ½ μμ μ 곡ν κΉνλΈ λ§ν¬λ₯Ό λλ¬λ³΄μλ€λ©΄, μ€μ μ½λλ μ£Όμ λλ¬Έμ μ’ λ λλ½κ² λκ»΄μ§ μ μλ€. μ£Όμμ κ°λ° μ€ κ³ μμ€ λ¬Έλ§₯μ μ½κ² μ°Έμ‘°ν μ μλ μ’μ λ°©λ²μ΄λΌ μκ°νλ€. λ§μ§λ§μ κΉλνκ² μ 리νλ€λ©΄ κ°λ° μ€μλ μ κ·Ήμ μΌλ‘ μ¬μ©νλ κ²μ΄ μ’λ€κ³ μκ°νλ€.
μ¬λ―Έμλ μ¬μ€μ μ΄λ° λ°©λ²λ‘ μ μ κ·Ήμ μΌλ‘ λμ νμμλ, μμ§ μμ μ΅μ§ μμ μꡬμ¬νμ λμΉλ λ±μ μ€μκ° λ°μνλ€λ μ μ΄λ€. μμ μ μ΅μ΄ μꡬμ¬ν λΆμμΌλ‘ ν μ€νΈ μΌμ΄μ€λ₯Ό λ§λλ μ ν μμ μΌλ‘ λμμ λ°μλ κΈ°μ΅μ΄ λμ, λ€μμλ κ·Έλ° λΆλΆμ κ³ λ €ν΄λ³Ό μμ μ΄λ€.
+ μλμ λ΄μ©μ 10μΌ μ μ μμ±νλ λ΄μ©μ΄λ€. 12μ 3μΌμ λ΄ λͺ¨μ΅μ 13μΌ νμ¬μ λͺ¨μ΅κ³Ό λ§μ΄ λ¬λΌλ³΄μΈλ€. λ¬Όλ‘ μ§κΈλ μλ μ ν λ΄μ©λ€μ νμ©νμ§λ§, μ°¨μ΄μ μ΄λΌ νλ©΄ λΉμμλ ꡬνμ μμλ νλμ μ μ½μ λμλ€λ κ²μ΄κ³ , νμ¬λ μ¬κ³ μ νμ μ’νλ λλμ΄ μλ€.
[!tldr] μμ£Ό λ°λ³΅λλ λΉμ·ν κ²μ μ νννλ©΄, μ°¨μ΄μ μ μ§μ€ν μ μκ² λλ€.
κ³νμ μ¬κ³ μ νμ΄λ€. μ΄λ¬ν κΈ°λ°μ μ¬μν κ³ λ―Ό μμ΄ ν΅μ¬μ λΉ λ₯΄κ² μ§μ€ν μ μλλ‘ λ§λ€μ΄μ€λ€. λ€μμ μꡬμ¬ν μ μμκ° μ£Όμ΄μ§λ€λ κ°μ νμ, κ·Έκ²μ PM/κ°λ°μμ μΈμ΄λ‘ μμ±νλ κ³Όμ μ νμ€νν λ΄μ©μ΄λ€.
## 1. μꡬμ¬ν μ 리
> μ
λ ₯λΆν° μΆλ ₯κΉμ§ `μλ£νμ λ³ν`μΌλ‘ λ
Όλ¦¬μ νλ¦μ νννλ€.<br>
> νμνλ€λ©΄ μμμ μλ£νμ μλ‘κ² μ μν μ μλ€.
## 2. κ°μ²΄ μ€κ³
> μμ
μ μ§νν λμμ μ ννκ³ ,
> `μ±
μκ³Ό μν `μ 체ν¬λ¦¬μ€νΈλ‘ λμ΄νλ€.
## 3. μμΈ μν©
> μ΄λ€ μν©μ μ΄λ€ μμΈλ₯Ό λ°μμν€κ³ , μ΄λ»κ² μ²λ¦¬ν΄μΌ νλμ§ μ€λͺ
νλ€.
μ»€λ° λ©μμ§ μμ± κ³Όμ λ κ°λ° μ€ μκ·Όν μ€λ²ν€λκ° ν° λΆλΆμ΄λ€. κΈ°λ₯ μΆκ°λ§ μκ°νμ λμλ λ€μκ³Ό κ°μ νμ€νλ κ°λ₯ν κ² κ°λ€. μ΄λ¬ν λ°©μμ ==1. TDD κΈ°λ°==μΌλ‘ ==2. μꡬμ¬νμ λͺ¨λ ν μ€νΈλ‘ μμ±==νλ κ²μ μ μ λ‘ νκ³ μλ€.
## κΈ°λ³Έ μμΉ
### μ»€λ° νμ€
μΌλ°μ μΌλ‘ `μΈν°νμ΄μ€ - ν
μ€νΈ - ꡬν` μμλ‘ μ§ννλ€.
> `feat(μΈν°νμ΄μ€): implement (ꡬνν λ©μλ)`
>
> - (κ΄λ ¨ ν
μ€νΈ λ©μλ λμ΄...)
[!example]-
## 1. μꡬμ¬ν μ 리 - λ¬Έμμ΄(+λΆλ¦¬ κ·μΉ) -> μ«μ λ°°μ΄ -> μ«μ(λ§μ κ²°κ³Ό) - `String + ParseRule -> Iterable<Number> -> Number` ## 2. κ°μ²΄ μ€κ³ - [x] ꡬλΆμ(μΈν°νμ΄μ€; `Delimiter`): μ£Όμ΄μ§ λ¬Έμμ΄μ μμ μ κ΅¬λΆ κ·μΉμ λ°λΌ μ«μλ‘ λ³ννλ€. - κΈ°λ³Έ ꡬλΆμ(ν΄λμ€; `IntegerDefaultDelimiter`) - [x] μΌν(,)μ μ½λ‘ (:) λͺ¨λ ꡬλΆμλ‘ κ°μ£Όνλ€. - 컀μ€ν ꡬλΆμ(ν΄λμ€; `IntegerCustomDelimiter`) - [x] λ¬Έμμ΄ μλΆλΆμ `"//"`μ `"\n"` μ¬μ΄μ μμΉνλ λ¬Έμλ₯Ό ꡬλΆμλ‘ κ°μ£Όνλ€. - [x] κ³μ°κΈ°(ν΄λμ€; `Calculator`): μ£Όμ΄μ§ λ¬Έμμ΄μ λΆλ¦¬νκ³ , λν κ²°κ³Όλ₯Ό λ°ννλ€. ## 3. μμΈ μν© `IllegalArgumentException`μ λ°μμν€κ³ μ’ λ£νλ€. - [x] 컀μ€ν ꡬλΆμκ° κΈ°λ³Έ ꡬλΆμμ κ²ΉμΉλ©΄ μμΈλ₯Ό λ°μμν¨λ€. - [x] 컀μ€ν ꡬλΆμκ° μ«μλ©΄ μλμΉ μμ κ²°κ³Όκ° λ°μν μ μμΌλ―λ‘, μꡬμ¬νμ λͺ μλμ§λ μμμ§λ§ μμΈ μν©μΌλ‘ κ°μ£Όνλ€. - [x] μ«μλ₯Ό λΆλ¦¬ν λ, νμ μ€λ₯κ° λ°μν μ μλ€. - [x] λΆλ¦¬λ μ«μκ° μμκ° μλλΌλ©΄ μμΈλ₯Ό λ°μμν¨λ€. - [x] μ«μλ₯Ό λν λ, μ€λ²νλ‘μ°κ° λ°μν μ μλ€.