λ¨Όμ , μ°μνν
ν¬μ½μ€μ μ΄λ² 3μ£Όμ°¨ λ―Έμ
μλ λ€μμ μ‘°κ±΄μ΄ μμ±λμμ΅λλ€.
κ·Έλ°λ° μ κ° ν¨ν€μ§ ꡬ쑰λ₯Ό μμ±νλ€λ³΄λ 1κ°μ§ μλ¬Έμ΄ μκ²Όμ£ π€
Lotto ν΄λμ€μ μμ μμΈ μ²λ¦¬κ° νκΊΌλ²μ λ€μ΄κ° μλλ°, μ΄κ²μ λ΄κ° ꡬννλ λ°©μλλ‘ λ³λμ Exception ν¨ν€μ§ μμμ μμΈλ₯Ό μ²λ¦¬ν λ€ improtν΄μ μ¬μ©νλ©΄ μλλ κ²μΈκ°?νλ κ³ λ―Όμ΄μμ΅λλ€.
λ¨Όμ , μμ μ μ½ μ¬νμ νκ°μ§μ© κ°μ Έμ λ³Όκ²μ.
1οΈβ£ μ 곡λ Lotto
ν΄λμ€λ₯Ό νμ©ν΄ ꡬνν΄μΌ νλ€.
-> μ΄κ²μ κ³ μ νλΌλ λ§μ΄ μλ, νμ© μ΄λ λ¬Έμ κ° μμ κ² κ°λ€μ!
2οΈβ£ numbers
μ μ κ·Ό μ μ΄μμΈ privateμ λ³κ²½ν μ μλ€.
-> private μνλ‘ κ΅¬νν μμ μ΄λ λ¬Έμ κ° μμ κ²μΌλ‘ 보μ
λλ€.
3οΈβ£ Lotto
μ νλ(μΈμ€ν΄μ€ λ³μ)λ₯Ό μΆκ°ν μ μλ€.
-> μ΄ λΆλΆμ νλ(μΈμ€ν΄μ€ λ³μ)μ λν΄μ μ νν μ§κ³ λμ΄κ°μΌκ² λ€μ!
Javaμμμ νλ(μΈμ€ν΄μ€ λ³μ)λ?
ν΄λμ€ λ³μ(static)
Static ν€μλκ° λ€μ΄κ°λ©° μ μΈλ λ³μλ₯Ό μλ―Έ.
ν΄λΉ λ³μλ ν΄λμ€λ₯Ό μ¬λ¬ λ² μμ±νλλΌλ, νλ²λ§ μμ±λλ νΉμ§μ΄ μμ.
λμΌν ν΄λμ€λΌλ©΄ λͺ¨λ κ°μ²΄κ° μ¬μ© κ°λ₯.
μΈμ€ν΄μ€ λ³μ(non-static)
ν΄λμ€ μμμ μ μΈλ λ³μλ₯Ό μλ―Έ.
μ¬μ© μλ§λ€ λ§€λ² μλ‘κ² λ³μλ₯Ό μ μΈν΄μ€μΌνλ νΉμ§μ κ°μ§.
π [java] ν΄λμ€λ³μ, μΈμ€ν΄μ€ λ³μ μ°¨μ΄(staticλ³μμ non Staticλ³μ)
public class Lotto {
private final List<Integer> numbers; //ν΄λμ€ λ΄λΆμ μΈμ€ν΄μ€ λ³μ
static int BONUS_NUBMER = 6; //ν΄λμ€ λ³μ(staticν λ³μ)
public Lotto(List<Integer> numbers) {
validate(numbers);
this.numbers = numbers;
}
private void validate(List<Integer> numbers) {
if (numbers.size() != 6) {
throw new IllegalArgumentException();
}
}
// TODO: μΆκ° κΈ°λ₯ ꡬν
}
μμ μ£Όμ΄μ§ Lotto ν΄λμ€μ κ°λ¨ν μμλ₯Ό λν΄ νμΈν΄λ³΄λ©΄,
4οΈβ£ Lotto
μ ν¨ν€μ§ λ³κ²½μ κ°λ₯νλ€.
-> μ΄ λΆλΆμ ν¨ν€μ§ λ³κ²½ λ¬Έμ μ΄λ―λ‘ λ¬Έμ μμ΅λλ€!!
κ²°λ‘ : λ³λμ Exception ν¨ν€μ§ μμμ μμΈλ₯Ό μ²λ¦¬ν λ€ import ν΄μλ λ¬Έμ μμ§λ§, κ·Έ ν΄λμ€μ κ²½μ° staticν λ³μλ‘ μ μΈν΄μΌλ§ ν κ²μ΄λ€.
μ²μ κΈ°λ₯ λͺ©λ‘μ μ무 κ³ λ―Όμμ΄ μμ±νλλ°, λ€μ μκ°ν΄λ³΄λ μ΄μν μ μ΄ μμμ΅λλ€.
μ²μμλ κ·Έλ₯ λΉμ°ν
κ·Όλ° λ€μ μκ°ν΄λ³΄λ
κ·Έλμ μ κ° μ§μ λ‘λλ₯Ό μ°λ€κ³ μκ°νμ΅λλ€.
μμλ λ€μκ³Ό κ°κ² μ£ ?
1. λ‘λλ₯Ό μ¬λ¬ κ°λ€.
2. λ‘λ μΌλ§νΌ μ΄κ±΄μ§ μκ°νκ³ , κ·Έμ λ§λ κΈμ‘μ ν맀μ²μ λλ¦°λ€.(ex.8000μ -> 8μ₯)
3. μκ°μ΄ νλ₯΄κ³ λ‘λ μΆμ²¨ μκ°μ΄ λλ©΄, μΆμ²¨νλ κ³³μμ λΉμ²¨λ²νΈμ 보λμ€λ²νΈλ₯Ό μΆμ²¨νλ€.
4. κ·Έ λΉμ²¨ λ²νΈλ₯Ό λ΄κ° μ° λ‘λ λ²νΈμ λΉκ΅ν΄ λΉμ²¨ μ¬λΆλ₯Ό νμΈνλ€.
μ΄λ¬ν νλ‘μΈμ€λ‘ λ‘λλ₯Ό ꡬμ
ν©λλ€.
κ·Έλ λ€λ©΄, νλ μ΄μ΄κ° μλ λ³λμ μΆμ²¨μκ° λΉμ²¨λ²νΈμ 보λμ€ λ²νΈλ₯Ό μ
λ ₯νλ κ²μ΄ λ§κ² μ£ ?
β‘οΈ μ¬κΈ°κΉμ§κ° νλ μ΄μ΄κ° ν λͺ«μ
λλ€.
β‘οΈ μ¬κΈ°κ° μΆμ²¨μκ° ν΄μΌν μΌμ΄μ£ .
β‘οΈ κ·Έλ¦¬κ³ μ΄λ κ² λΉμ²¨ ν΅κ³κ° λμ€λ κ²μ λ‘λλ₯Ό ꡬμ
νλ©΄ μμ μλ QRμ½λκ° μλλ°, κ·Έκ²μ μ°μΌλ©΄ μ°κ²°λλ μ¬μ΄νΈμμ μλμΌλ‘ λΉμ²¨μ νμΈν΄μ£Όλ νλ‘μΈμ€μ κ°μ κ²μ΄λΌκ³ μ΄ν΄νμ΄μ!
κ²°λ‘ : ꡬμ κΈμ‘ μ λ ₯μ νλ μ΄μ΄κ°, λΉμ²¨λ²νΈμ 보λμ€ λ²νΈλ μΆμ²¨μκ°!
- νλ μ΄μ΄κ° ꡬμ κΈμ‘μ μ λ ₯νκ³ , κ·Έμ λ§κ² λ²νΈλ₯Ό λΆμ¬λ°λλ€.
- λ³λμ μΆμ²¨μκ° λΉμ²¨λ²νΈμ 보λμ€ λ²νΈλ₯Ό μ λ ₯νλ€.
- νλ μ΄μ΄κ° λΆμ¬λ°μλ λ²νΈμ μΆμ²¨μμ λ²νΈλ₯Ό λΉκ΅ν΄ νλ μ΄μ΄μκ² λΉμ²¨ μ¬λΆλ₯Ό μλ €μ€λ€.
μ΄λ² λ―Έμ μμλ λ€μκ³Ό κ°μ μꡬμ¬νμ΄ μμμ΅λλ€.
μ¬μ©μκ° μλͺ»λ κ°μ μ λ ₯ν κ²½μ°
IllegalArgumetException
λ₯Ό λ°μμν€κ³ , "[ERROR]"λ‘ μμνλ μλ¬ λ©μμ§λ₯Ό μΆλ ₯ ν κ·Έ λΆλΆλΆν° μ λ ₯μ λ€μ λ°λλ€.
Exception
μ΄ μλIllegalArgumentException
,IllegalStateException
λ±κ³Ό κ°μ λͺ νν μ νμ μ²λ¦¬νλ€.
μ΄ μ€μμλ μλ λ¬Έμ₯μ λ»μ μκ³ μΆμμ΄μ.
IlegalArgumentExceptionμ λ°μμν€λ 쑰건μ μ λ² λ―Έμ
μλ λκ°μ΄ ν΄μκΈ° λλ¬Έμ μ¬μ©μμ μλͺ»λ μ
λ ₯μ λν μμΈμ²λ¦¬λ₯Ό νλ©΄ λκ² κ΅¬λ μκ°νμμ΅λλ€.
νμ§λ§, κ³Όμ° IllegalStateExceptionμ΄λ 무μμΈκ°κ° κ°μ₯ κΆκΈνμ΄μ!
IllegalStateException
μ΄λ?μ¦, μ£Όλͺ©ν΄μΌ ν μ μ κ²μμ΄ running μνκ° μλ λ λ°μνλ μμΈλΌλ μ μ
λλ€.
μ κ° μ¬μ©ν IntelliJ IDEAμ κ²½μ°, μ¬μ©μκ° μ
λ ₯μ ν μ μλ μ½μ μμ²΄κ° κ²μ μ’
λ£ μμλ Read-Only μνλ‘ λμκ°λλ€.
κ·Έλ κΈ° λλ¬Έμ μμΈκ° λ°μν μ μλ μν©μ΄λΌ νλ¨ν μ μμμ£ !
βοΈ κ²°λ‘
IllegalArgumentException
μ λν΄μλ§ λͺ
μμ μΌλ‘ μ½λμ μμΈλ₯Ό μμ±νλ©΄ λλ€!
μ΄λ² λ―Έμ μμλ λ€μκ³Ό κ°μ μλ‘μ΄ μꡬμ¬νλ λ±μ₯νμ΅λλ€ λλ₯π€£
- λλ©μΈ λ‘μ§μ λ¨μ ν μ€νΈλ₯Ό ꡬνν΄μΌ νλ€. λ¨, UI(System.out, System.in, Scanner) λ‘μ§μ μ μΈνλ€.
- ν΅μ¬ λ‘μ§μ ꡬννλ μ½λμ UIλ₯Ό λ΄λΉνλ λ‘μ§μ λΆλ¦¬ν΄ ꡬννλ€.
- λ¨μ ν μ€νΈ μμ±μ΄ μ΅μνμ§ μλ€λ©΄
test/java/lotto/LottoTest
λ₯Ό μ°Έκ³ νμ¬ νμ΅ν ν ν μ€νΈλ₯Ό ꡬννλ€.
κ·Έ μ€μμλ λλ©μΈ λ‘μ§
μ΄ μ΄λ€ κ²μ μλ―Ένλμ§ κ°μ₯ κΆκΈνμ΄μ.
μ°μ , 2κ°μ§λ‘ μΆλ €λ΄€μ΅λλ€.
1. λ΄ Domain ν¨ν€μ§ λ΄μ μ½λλ§μ ν¬ν¨
2. λλ©μΈμ μν μ νλ μ½λ λͺ¨λλ₯Ό ν¬ν¨
μ²μμλ 1λ²μ΄ μ‘°κΈ λ λΆν©νμ§ μμκΉ μκ°νκ³ , μ°μ 1λ²μ κΈ°μ€μΌλ‘ ν
μ€νΈ μ½λλ₯Ό μμ±νμ΅λλ€.
μ μ κ²½μ°,
μ 3κ°μ§ μ½λκ° μμμ΄μ!
κ·Έλ°λ°...
λκ° ν
μ€νΈ μ½λκ° λΉμ½νλ€?λ μκ°μ νλ κ² κ°μ΅λλ€.
κ·Έλμ μ΄μ¬ν μ°Ύμλ΄€μ£ !!
κ·Έλ¦¬κ³ κ²°κ΅ μνλ μ 보λ₯Ό μ΄λ μ λ μ°Ύμλμ΅λλ€.
π[μ°μνν
ν¬μ½μ€ 5κΈ°] ν리μ½μ€ 3μ£Όμ°¨ νκ³
λλ©μΈ/λΉμ¦λμ€ λ‘μ§μ΄λΌλ κ²μ λ°λμ Domain ν¨ν€μ§μλ§ μνλ κ²μ΄ μλλΌλ κ²μ
λλ€.
μ΄ κ³³μμ λ€μ νλ² κΉ¨λ¬μ μ μ, νμ¬ MVC ν¨ν΄μ μ μ©ν΄ ν¨ν€μ§λ₯Ό ꡬμ±ν κ²μ "μ μμ " μ΄λΌλ μ μ΄μμ.
μ΄λ κ² κ΅¬μ±νλΌκ³ μ£Όμ΄μ§ μ μ΄ μμλ€λ κ²μ λ€μ νλ² λλμ΄κ² λκ²λλ€...!
βοΈκ²°λ‘
λλ©μΈ/λΉμ¦λμ€μ λ‘μ§μ λ΄λΉνλ μ½λ μ 체
λ₯Ό λλ©μΈ λ‘μ§μΌλ‘ μ‘κ³ ν
μ€νΈ μ½λλ₯Ό μμ±νλ©΄ λλ€.μ΄ λΆλΆμ μΌλμ λκ³ , μΆκ°μ μΌλ‘ λ‘λ κ²μμ ν΅μ¬ λ‘μ§μ μ΄λμ΄λκ°λ€κ³ μκ°ν μ΄ μ½λλ€μ ν μ€νΈ μ½λκΉμ§ μμ±νμ΅λλ€.
...
βββ Service
| βββ PlayerInputManagerService.java
| βββ WinningNumberComparatorService.java
βββ Util
| βββ LottoNumberGenerator.java
μ μκ°μ΄ λͺ¨λμκ² μκ·Έλ§ν λμμ΄ λκΈΈ λ°λΌλ©° μ΄λ§ κ°κ² μ΅λλ€!