1. π λ―Έμ μ€λͺ
3μ£Ό μ°¨μ λ―Έμ μ 'λ‘λ κ²μ'μ ꡬννλ κ²μ΄λ€. λ‘λ κ²μμ κΈ°λ³Έμ μΈ κ·μΉμ μλμ κ°λ€.
- λ‘λ λ²νΈμ μ«μ λ²μλ 1~45κΉμ§μ΄λ€.
- 1κ°μ λ‘λλ₯Ό λ°νν λ μ€λ³΅λμ§ μλ 6κ°μ μ«μλ₯Ό λ½λλ€. (λ‘λ 1μ₯μ κ°κ²©μ 1,000μμ΄λ€.)
- λΉμ²¨ λ²νΈ μΆμ²¨ μ μ€λ³΅λμ§ μλ μ«μ 6κ°μ 보λμ€ λ²νΈ 1κ°λ₯Ό λ½λλ€.
- λΉμ²¨μ 1λ±λΆν° 5λ±κΉμ§ μλ€.
- 1λ±: 6κ° λ²νΈ μΌμΉ / 2,000,000,000μ
- 2λ±: 5κ° λ²νΈ + 보λμ€ λ²νΈ μΌμΉ / 30,000,000μ
- 3λ±: 5κ° λ²νΈ μΌμΉ / 1,500,000μ
- 4λ±: 4κ° λ²νΈ μΌμΉ / 50,000μ
- 5λ±: 3κ° λ²νΈ μΌμΉ / 5,000μ
- μ¬μ©μκ° κ΅¬λ§€ν λ‘λ λ²νΈμ λΉμ²¨ λ²νΈλ₯Ό λΉκ΅νμ¬ λΉμ²¨ λ΄μ λ° μμ΅λ₯ μ μΆλ ₯νκ³ λ‘λ κ²μμ μ’ λ£νλ€.
μΆκ°λ μꡬ μ¬νμ μλμ κ°λ€.
- ν¨μ(λλ λ©μλ)μ κΈΈμ΄κ° 15λΌμΈμ λμ΄κ°μ§ μλλ‘ κ΅¬ννλ€.
- else μμ½μ΄λ₯Ό μ°μ§ μλλ€.
- Java Enumμ μ μ©νλ€.
2. π’ κ³΅ν΅ νΌλλ°±
1) λ°μν μ μλ μμΈ μν©μ λν΄ κ³ λ―Όνλ€.
μ μμ μΈ κ²½μ°λ₯Ό ꡬν νλ κ²λ³΄λ€ μμΈ μν©μ λͺ¨λ κ³ λ €ν΄ νλ‘κ·Έλλ°νλ κ²μ΄ λ μ΄λ ΅λ€. μμΈ μν©μ κ³ λ €ν΄ νλ‘κ·Έλλ°νλ μ΅κ΄μ λ€μΈλ€. μ΄λ² κ³Όμ μ μμΈ μν©μ μλμ κ°μ κ²λ€μ΄ μλ€.
- λ‘λ ꡬμ κΈμ‘μ 1000 μ΄νμ μ«μλ₯Ό μ λ ₯νλ κ²½μ°
- λΉμ²¨ λ²νΈμ μ€λ³΅λ μ«μλ₯Ό μ λ ₯ν κ²½μ°
- λΉμ²¨ λ²νΈμ 1 ~ 45 λ²μλ₯Ό λ²μ΄λλ μ«μλ₯Ό μ λ ₯νλ κ²½μ°
- λΉμ²¨ λ²νΈμ μ€λ³΅λ 보λμ€ λ²νΈλ₯Ό μ λ ₯νλ κ²½μ°
2) λΉμ¦λμ€ λ‘μ§κ³Ό UI λ‘μ§μ λΆλ¦¬νλ€.
λΉμ¦λμ€ λ‘μ§κ³Ό UI λ‘μ§μ ν ν΄λμ€κ° λ΄λΉνμ§ μλλ‘ νλ€. λ¨μΌ μ± μμ μμΉμλ μλ°°λλ€.
public class Lotto{
private List<Integer> numbers;
// λ‘λ μ«μκ° ν¬ν¨λμ΄ μλμ§ νμΈνλ λΉμ¦λμ€ λ‘μ§
public boolean contains(int number){
...
}
// UI λ‘μ§
private void print(){
...
}
}
νμ¬ κ°μ²΄μ μνλ₯Ό 보기 μν λ‘κ·Έ λ©μμ§ μ±κ²©μ΄ κ°νλ€λ©΄ toString()μ ν΅ν΄ ꡬννλ€.
Viewμμ μ¬μ©ν λ°μ΄ν°λΌλ©΄ getter λ©μλλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ λ¬νλ€.
3) μ°κ΄μ±μ΄ μλ μμλ static final λμ enumμ νμ©νλ€.
public enum Rank{
FIRST(6, 2_000_000_000),
SECOND(5, 30_000_000),
THIRD(5, 1_500_000),
FOURTH(4, 50_000),
FIFTH(3, 5_000),
MISS(0, 0);
private int countOfMatch;
private int winningMoney;
private Rank(int countOfMatch, int winningMoney){
this.countOfMatch = countOfMatch;
this.winningMoney = winningMoney;
}
}
4) final ν€μλλ₯Ό μ¬μ©ν΄ κ°μ λ³κ²½μ λ§λλ€.
μ΅κ·Όμ λ±μ₯νλ νλ‘κ·Έλλ° μΈμ΄λ€μ κΈ°λ³Έμ΄ λΆλ³ κ°μ΄λ€. μλ°λ final ν€μλλ₯Ό νμ©ν΄ κ°μ λ³κ²½μ λ§μ μ μλ€.
public class Money{
private final int amount;
public Money(int amount){
...
}
}
5) κ°μ²΄μ μν μ κ·Όμ μ ννλ€
μΈμ€ν΄μ€ λ³μμ μ κ·Ό μ μ΄μλ privateλ‘ κ΅¬ννλ€.
public class WinningLotto{
private Lotto lotto;
private Integer bonusNumber;
public WinningLotto(Lotto lotto, Integer bonusNumber){
this.lotto = lotto;
this.bonusNumber = bonusNumber;
}
}
6) κ°μ²΄λ κ°μ²΄μ€λ½κ² μ¬μ©νλ€.
Lotto ν΄λμ€λ numbersλ₯Ό μν κ°μΌλ‘ κ°μ§λ κ°μ²΄μ΄λ€. κ·Έλ°λ° μ΄ κ°μ²΄λ λ‘μ§μ λν ꡬνμ νλλ μκ³ , numbersμ λν getter λ©μλλ§μ κ°μ§λ€.
public class Lotto{
private final List<Integer> numbers;
public Lotto(List<Integer> numbers){
this.numbers = numbers;
}
public int getNumbers(){
return numbers;
}
}
public class LottoGame{
public void play(){
Lotto lotto = new Lotto(...);
// μ«μκ° ν¬ν¨λμ΄ μλμ§ νμΈνλ€.
lotto.getNumbers().contains(number);
// λΉμ²¨ λ²νΈμ λͺ κ°κ° μΌμΉνλμ§ νμΈνλ€.
lotto.getNumbers().stream()...
}
}
Lottoμμ λ°μ΄ν°λ₯Ό κΊΌλ΄μ§(get) λ§κ³ λ©μμ§λ₯Ό λμ§λλ‘ κ΅¬μ‘°λ₯Ό λ°κΏ λ°μ΄ν°λ₯Ό κ°μ§λ κ°μ²΄κ° μΌνλλ‘ νλ€.
public class Lotto{
private final List<Integer> numbers;
public boolean contains(int number){
// μ«μκ° ν¬ν¨λμ΄ μλμ§ νμΈνλ€.
...
}
public int matchCount(Lotto other){
// λΉμ²¨ λ²νΈμ λͺ κ°κ° μΌμΉνλμ§ νμΈνλ€.
...
}
}
public class LottoGame{
public void play(){
Lotto lotto = new Lotto(...);
lotto.contains(number);
lotto.matchCount(...);
}
}
7) νλ(μΈμ€ν΄μ€ λ³μ)μ μλ₯Ό μ€μ΄κΈ° μν΄ λ Έλ ₯νλ€.
νλ(μΈμ€ν΄μ€ λ³μ)μ μκ° λ§μ κ²μ κ°μ²΄μ 볡μ‘λλ₯Ό λμ΄κ³ , λ²κ·Έ λ°μ κ°λ₯μ±μ λμΌ μ μλ€. νλμ μ€λ³΅μ΄ μκ±°λ, λΆνμν νλκ° μλμ§ νμΈν΄ νλμ μλ₯Ό μ΅μννλ€.
μλ₯Ό λ€μ΄ μ΄ μκΈ λ° μμ΅λ₯ μ ꡬνλ λ€μ κ°μ²΄λ₯Ό 보μ.
public class LottoResult{
private Map<Rank, Integer> result = new HashMap<>();
private double profitRate;
private int totalPrize;
}
μ κ°μ²΄μ profitRateμ totalPrizeλ λ±μ λ³ λΉμ²¨ λ΄μ(result)λ§ μμ΄λ λͺ¨λ ꡬν μ μλ κ°μ΄λ€. λ°λΌμ μ κ°μ²΄λ λ€μκ³Ό κ°μ΄ νλμ νλλ§μΌλ‘ ꡬνν μ μλ€.
public class LottoResult{
private Map<Rank, Integer> result = new HashMap<>();
public double calculateProfitRate(){ ... }
public int calculateTotalPrize(){ ... }
}
8) ν μ€νΈ μ½λλ μ½λλ€
ν μ€νΈ μ½λλ μ½λμ΄λ―λ‘ λ¦¬ν©ν°λ§μ ν΅ν΄ κ°μ ν΄λκ°μΌ νλ€. νΉν λ°λ³΅μ μΌλ‘ νλ λΆλΆμ μ€λ³΅λμ§ μκ² λ§λ€μ΄μΌ νλ€. μλ₯Ό λ€μ΄ λ¨μν νλΌλ―Έν°μ κ°λ§ λ°λλ κ²½μ°λΌλ©΄ μλμ κ°μ΄ ν μ€νΈν μ μλ€.
@DisplayNmae("μ²μ λ―Έλ§μ κΈμ‘μ λν μμΈ μ²λ¦¬")
@ValueSource(strings = {"999", "0", "-123"})
@ParameterizedTest
void underLottoPrice(Integer input){
assertThatThrownBy(() -> new Money(input))
.isInstanceof(IllegalArgumentException.class);
}
9) ν μ€νΈλ₯Ό μν μ½λλ ꡬν μ½λμμ λΆλ¦¬λμ΄μΌ νλ€.
ν μ€νΈλ₯Ό μν νΈμ λ©μλλ₯Ό ꡬν μ½λμ ꡬννμ§ λ§λΌ. μλμ μμμ²λΌ ν μ€νΈλ₯Ό ν΅κ³ΌνκΈ° μν΄ κ΅¬ν μ½λλ₯Ό λ³κ²½νκ±°λ ν μ€νΈμμλ§ μ¬μ©λλ λ‘μ§μ λ§λ€μ§ μλλ€.
- ν μ€νΈλ₯Ό μν΄ μ κ·Ό μ μ΄μλ₯Ό λ°κΎΈλ κ²½μ°
- ν μ€νΈ μ½λμμλ§ μ¬μ©λλ λ©μλ
10) λ¨μ ν μ€νΈνκΈ° μ΄λ €μ΄ μ½λλ₯Ό λ¨μ ν μ€νΈνκΈ°
μλ μ½λλ Random λλ¬Έμ Lottoμ λν λ¨μ ν μ€νΈλ₯Ό νκΈ° νλ€λ€. λ¨μ ν μ€νΈκ° κ°λ₯νλλ‘ λ¦¬ν©ν°λ§ νλ€λ©΄ μ΄λ»κ² νλ κ²μ΄ μ’μκΉ?
public class Lotto{
private List<Integer> numbers;
public Lotto(){
this.numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6);
}
}
-----------------------------------------
public class LottoMachine{
public void execut(){
Lotto lotto = new Lotto();
}
}
μ¬λ°λ₯Έ λ‘λ λ²νΈκ° μμ±λλ κ²μ ν μ€νΈνκΈ° μ΄λ ΅λ€. ν μ€νΈνκΈ° μ΄λ €μ΄ κ²μ ν΄λμ€ λ΄λΆκ° μλ μΈλΆλ‘ λΆλ¦¬νλ μλλ₯Ό ν΄λ³Έλ€.
public class Lotto{
private List<Integer> numbers;
public Lotto(List<Integer> numbers){
this.numbers = numbers;
}
}
-----------------------------------------
public class LottoMachine{
public void execute(){
List<Integer> numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6);
Lotto lotto = new Lotto(numbers);
}
}
μ΄μ²λΌ λ¨μ ν μ€νΈλ₯Ό ν λ ν μ€νΈνκΈ° μ΄λ €μ΄ λΆλΆμ λΆλ¦¬νκ³ ν μ€νΈ κ°λ₯ν λΆλΆμ λ¨μ ν μ€νΈνλ€. ν μ€νΈνκΈ° μ΄λ €μ΄ λΆλΆμ λ¨μ ν μ€νΈνμ§ μμλ λλ€. λ¨μ LottoMachineμ μ΄λ»κ² ν μ€νΈνκΈ° μ½κ² λ°κΏ μ μλμ§ κ³ λ―Όν΄λ³Έλ€.
11) private ν¨μλ₯Ό ν μ€νΈνκ³ μΆλ€λ©΄ ν΄λμ€(κ°μ²΄) λΆλ¦¬λ₯Ό κ³ λ €νλ€.
κ°λ μ±μ μ΄μ λ§μΌλ‘ λΆλ¦¬ν private ν¨μμ κ²½μ° publicμΌλ‘λ κ²μ¦ κ°λ₯νλ€κ³ μ¬κ²¨μ§ μ μλ€. public ν¨μκ° private ν¨μλ₯Ό μ¬μ©νκ³ μκΈ° λλ¬Έμ μμ°μ€λ½κ² ν μ€νΈ λ²μμ ν¬ν¨λλ€. νμ§λ§ κ°λ μ± μ΄μμ μν μ νλ κ²½μ°, ν μ€νΈνκΈ° μ½κ² ꡬννκΈ° μν΄μλ ν΄λΉ μν μ μννλ λ€λ₯Έ κ°μ²΄λ₯Ό λ§λ€ νμ΄λ°μ΄ μλμ§ κ³ λ―Όν΄ λ³Ό μ μλ€.
3. π λ°°μ΄ μ & λλ μ
- μμ κ³΅ν΅ νΌλλ°±μ ν΅ν΄μ μ μ μλ κ²μ²λΌ κ°μ ν΄μΌ ν μ μ΄ μμ£Ό λ§λ€. νΉν ν΄λμ€λ₯Ό μ΄λ»κ² νλ©΄ μ λΆλ¦¬νλμ§μ λν νμ΅μ΄ νμνλ€.
- μ΄μ κΉμ§λ enumμ λ¨μ μ΄κ±°νλ ννλ‘ μ¬μ©νλλ° μ΄λ² κΈ°νλ₯Ό ν΅ν΄μ enumμ ν΄λμ€μ²λΌ μ¬μ©νλ λ°©λ²μ μ΅ν μ μμλ€.