[์ฐ์ํํ ํฌ์ฝ์ค 6๊ธฐ] ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ ๋ก๋ ๋ฏธ์ ํ๊ธฐ
by rlaehddnd04223์ฃผ์ฐจ๊ฐ ๋ง๋ฌด๋ฆฌ๋์์ต๋๋ค. 2์ฃผ์ฐจ์ ๋น๊ตํด๋ณด์๋ฉด ์ฒ์ ๋ฏธ์ ์ ๋ฐ๊ณ ์๊ตฌ์ฌํญ์ ์ฝ์ด๋ณด์์ ๋ ์๊ฐ ๋งํผ์ ์ฒด๊ฐ ๋์ด๋๊ฐ ๊ฝค ๋๋ค๊ณ ๋๊ปด์ก๋ ๋ฏธ์ ์ด์์ต๋๋ค.
3์ฃผ์ฐจ ๋ชฉํ
1. ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ค๊ณํ๊ธฐ
์ด๋ฒ ์ฃผ์ฐจ์๋ ์ง๋ ์ฃผ์ฐจ์์ ๊ณ ๋ฏผํ๋ ๊ฒ๋ค์ ๋ํ ๋ต์ ์ ํ๊ณ ๋ฏธ์ ์ ์งํํ๋งํผ ๊ฐ์ฒด์งํฅ์ ๊ฐ๋ ๋ค์ ๋ง์ด ์ ๊ฒฝ์จ์ ์ฝ๋์ ์ ์ฉํด๋ณด์์ต๋๋ค.
2. ๊ณตํต ํผ๋๋ฐฑ์ ๋ฐ๋์ ์งํค๊ธฐ
2์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ์ ์๋์ ๊ฐ์ต๋๋ค.
- README ์์ธํ ์์ฑํ๊ธฐ
- ๊ธฐ๋ฅ ๋ชฉ๋ก ์์๋ก ์ฌ๊ฒํ ๋ฐ ์ ๋ฐ์ดํธํ๊ธฐ
- ๋งค์ง๋๋ฒ ์์๋ก ๊ด๋ฆฌํ๊ธฐ
- ์ ์ธ ์์ ์งํค๊ธฐ ( ์์ - ๋ฉค๋ฒ๋ณ์ - ์์ฑ์ - ๋ฉ์๋ )
- ๋ณ์ ์ด๋ฆ์ ์๋ฃํ ์ฌ์ฉํ์ง ์๊ธฐ
- ํ ํจ์๋ "ํ ๊ฐ์ง" ๊ธฐ๋ฅ๋ง ๋ด๋นํ๋๋ก ๊ตฌํํ๊ธฐ
- ํ ์คํธ๋ฅผ ์์ฑํ๋ ์ด์ ์ ๋ํด ์๊ฐํด๋ณด๊ธฐ
- ์์ ๋จ์ -> ํฐ๋จ์ ์์ผ๋ก ํ ์คํธ ์์ฑํ๊ธฐ
์ด๋ฒ ๋ฏธ์ ์ ์งํํ๋ฉด์ ํญ์ ์ฝ๋๋ฅผ ์์ฌํ๊ณ ์ ๊ฒํ๋ ๊ณผ์ ์ ํตํด ํผ๋๋ฐฑ์ ์งํค๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
3์ฃผ์ฐจ์์ ๋ฐฐ์ด ์ ๋ค
1. Enum ํ์ฉํ๊ธฐ
ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ์ฌํญ์ ์ถ๊ฐ์ ์ผ๋ก Enum ์ ํ์ฉํด๋ณด๋ผ๋ ์๊ตฌ์ฌํญ์ด ์์์ต๋๋ค. Enum์ ์ด๋ป๊ฒ ํ์ฉํ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
- ์์ ๊ฐ์ด ์ ์ญ์ ์ผ๋ก ์ฌ์ฌ์ฉ์ ์ฌ์ง๊ฐ ์๋ ์์๋ค์ Enum์ผ๋ก ์์๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ๊ธด ํ์ผ๋, ์ด ํ๋๋ก Enum์ ํ์ฉํ๋ค๊ธฐ์๋ ๋ถ์กฑํ์ต๋๋ค.
- ์ด๋ป๊ฒ Enum์ ํ์ฉํด์ผ ํ ์ง ๊ณ ๋ฏผํ๋ ์ค, ๋ก๋์ ํต๊ณ๋ฅผ ์ฐ์ถํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ Enum์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ ์ ์์์ต๋๋ค.
- ์ฐ๊ด์ฑ์ด ์๋ ์์๋ค์ enum์ผ๋ก ๊ด๋ฆฌํจ๊ณผ ๋์์ ์์ ๊ฐ์ด ๋ก๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋๋ฐ EnumMap์ผ๋ก ์ฌ์ฉํ์์ต๋๋ค.
- 1๋ฑ๋ถํฐ 5๋ฑ๊น์ง์ ๋น์ฒจ ์ ๋ณด๋ฅผ Enum์ผ๋ก ๋ง๋ค๊ณ , Key์ Enum์, Value์๋ Integer๋ฅผ ๋ฃ์ EnumMap์ ๋ง๋ค์ด ํต๊ณ๋ฅผ ์ฐ์ถํ ๋ Key๊ฐ์ ์คํธ๋ฆผํ์ฌ ์ผ์นํ๋ Key๋ฅผ ๋ฐ๊ฒฌํ๋ฉด Value๋ฅผ ํ๋ ์ฌ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํต๊ณ๋ฅผ ์ฐ์ถํ์ฌ Enum์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ ์ ์์์ต๋๋ค.
- Enum์ ๋จ์ํ ์ด๊ฑฐํ ์์๋ฅผ ์ ์ํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋น์ฆ๋์ค ๋ก์ง์ Enum์ ํ์ฉํ๋ Enum ์ฌ์ฉํ์ง ์์์ ๋์ ๋น๊ตํ์ ๋ ๋ฏธ์ ์ ์์ํ๊ฒ ์งํํ ์ ์์์ต๋๋ค.
2. ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด์ค๋ฝ๊ฒ ์ฌ์ฉํ๊ธฐ
์บก์ํ์, ๋จ์ผ ์ฑ ์์์น์์ ์ ๊ฐํ ๊ฐ์ฒด์ค๊ณ์ ์ง์คํ์ต๋๋ค. ์ฝ๊ฒ ๋งํด ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ ์ ์๋ ์ผ์ ์ธ๋ถ์์ ์ํํ์ง ๋ง๊ณ , ๊ฐ์ฒด ์ค์ค๋ก ํ ์ ์๋๋ก ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. ๋ง๋ก ์ค๋ช ํ๋๋ฐ๋ ํ๊ณ๊ฐ ์์ด ์์๋ฅผ ํ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
public class Lotto {
private final List<Integer> numbers;
์ ํด๋์ค๋ ๋ก๋ 1์ฅ์ ๋ํ ํด๋์ค์ ๋๋ค. ํ๋๋ก๋ ๋ก๋ ๋ฒํธ์ ๋ํ ์ ๋ณด๋ฅผ Integer List numbers๋ก ๋ด๊ณ ์์ต๋๋ค.
์ด ํด๋์ค์ ์ํด ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
๋จผ์ ์บก์ํ ์ธก๋ฉด์์ ๋ฐ๋ผ๋ด ์๋ค.
numbers ์ธ์คํด์ค ๋ณ์๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ด ๋ฒํธ๋ฅผ ๋ณด์ฌ์ฃผ์ด์ผ ํ๋ค๊ฑฐ๋, ๋ค๋ฅธ ๋ชจ๋ธ์ ์์ฑํ ๋ ์ด ๋ฒํธ๋ฅผ ํ์๋ก ํ๋ค๊ฑฐ๋ ๋ฑ๋ฑ์ ๊ฒฝ์ฐ๋ก ์ธ๋ถ์ ๋ฌผ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฒํธ ํ๋๋ฅผ ์ธ๋ถ์์ ์กฐ์ํ๊ฑฐ๋ ์ธ๋ถ์์ ์ด ๊ฐ์ ๋น๊ตํ๋ ๊ฒฝ์ฐ ์ด ๊ฐ์ฒด์ ์บก์ํ๊ฐ ๊นจ์ง๊ฒ ๋ฉ๋๋ค.
์บก์ํ : ๊ฐ์ฒด ๋ด๋ถ์ ์์ฑ์ด๋ ํ์๋ฅผ ํ๋๋ก ๋ฌถ์ด ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ํ๋ ํ์.
์บก์ํ๋ฅผ ์งํค๊ธฐ ์ํด์๋ Tell, Do not Ask ์์น์ด ์์ต๋๋ค. ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ฒด์๊ฒ ์ฒ๋ฆฌํ ํ์๋ฅผ ์์ฒญํ๋ผ๋ ํ์์ ๋๋ค. ์ ์ฉํ์ง ์์ ์์๋ฅผ ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
<์ ์ฉํ์ง ์์ ์์>
public class Lotto {
private final List<Integer> numbers;
...
}
public class TestClass {
public static void main(String[] args) {
List<Integer> userNumbers = SixRandomLottoNumber.generate();
List<Integer> winningNumbers = input.getNumbers();
Lotto userLotto = new Lotto(userNumbers);
Lotto winningLotto = new Lotto(winningNumbers);
Integer count = calculateMatchedCount(winningLotto.getNumbers(), userLotto.getNumbers());
}
private Integer calculateMatchedCount(List<Integer> winningNumbers, List<Integer> userNumbers) {
Integer count = 0;
// ๋น๊ตํ๋ ๊ธฐ๋ฅ ๊ตฌํ ...
return count;
}
}
- ์ฝ๋๋ฅผ ๋ณด์๋ฉด, Lotto ๊ฐ์ฒด์ ํ๋๊ฐ์ ๊บผ๋ด์์ ์ธ๋ถ์์ ์ผ์นํ๋ ๋ฒํธ์ ๊ฐ์๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฒ ์บก์ํ๊ฐ ๊นจ์ง๊ฒ ๋๋ฉด ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์กดํ๊ฒ ๋๋ฏ๋ก ์์ง๋๊ฐ ์ฌ๋ผ๊ฐ๊ณ , ํด๋น ๊ฐ์ฒด๊ฐ ์ฑ ์์ ธ์ผ ํ ๋น์ฆ๋์ค ๋ก์ง์ด ์ธ๋ถ๋ก ๋ ธ์ถ๋์ด ์์ด ๊ฐ์ฒด์ ์ญํ ๊ณผ ์ฑ ์์ด ๊นจ์ง๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒ์๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํด๊ฒฐํ๋๋ก ๋ค์ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
public class Lotto {
private final List<Integer> numbers;
...
public int countMatchedNumbers(final Lotto lotto) {
return (int) numbers.stream()
.filter(number -> lotto.contain(number))
.count();
}
public boolean checkBonusNumberContain(final BonusNumber bonusNumber) {
return this.contain(bonusNumber.number());
}
private boolean contain(final Integer number) {
return numbers.contains(number);
}
}
- ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ์์ ๊ณผ ๋์ผํ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ์ฌ ์ผ์นํ๋ ์ซ์์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๊ณ ์์ต๋๋ค.
- ์ด์ ๊ฐ์ด ์บก์ํ๋ฅผ ์งํค๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ๋ฐฉ์์ ์ธ๋ถ์์ ์ ํ์๊ฐ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
- ์ธ๋ถ์์ ๋์๋ฐฉ์์ ์ ํ์๊ฐ ์์ด์ก๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์๋ ์ด ๊ฐ์ฒด์ ๋ํ ์์กด์ด ์ฌ๋ผ์ ธ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ด์ ์ ์ป์ ์ ์๊ฒ ๋์์ต๋๋ค.
getter๋ฅผ ์ง์ํ๋ผ๋ ๋ฉ์์ง์ ์์ํจ์ด ์์๋๋ฐ, ์ด๋ฒ์์ผ ๊ทธ ์๋ฏธ๋ฅผ ์ ๋๋ก ์ดํดํ ์ ์์์ต๋๋ค.
3. ์ ๋ต ํจํด ์ ์ฉ
์ด๋ฒ ๋ฏธ์ ์์๋ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ์ํด ๋์ ์์ฑ ํด๋์ค์ ์ ๋ตํจํด์ ์ ์ฉํ์ต๋๋ค.
๋จผ์ ์ง๋ ๋ฏธ์ ์์์ ๋์ ์์ฑ ํด๋์ค๋ฅผ ์ฌ์ฉํ ํด๋์ค๋ฅผ ํ ์คํธํ ๋ฐฉ์์ ๋จผ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
class CarTest {
private static final Integer START_POINT = 0;
private static final Integer THRESHOLD = 4;
private static MockedStatic<RandomNumberGenerator> randomNumberGeneratorMockedStatic;
private Car car;
@BeforeAll
public static void beforeAll() {
randomNumberGeneratorMockedStatic = mockStatic(RandomNumberGenerator.class);
}
@DisplayName("๋๋ค ์ซ์๊ฐ ์๊ณ์น ์ด์์ธ ๊ฒฝ์ฐ ์๋์ฐจ๋ ์ ์งํ๋ค.")
@Test
void updatePosition_moving_required_test() throws Exception {
Car car = new Car(new CarName("Car1"));
given(RandomNumberGenerator.pickNumber()).willReturn(THRESHOLD);
Integer originalPosition = car.getCarPosition().position();
for (int i = 1; i <= 1000; i++) {
car.updatePosition();
Integer newPosition = car.getCarPosition().position();
assertTrue(newPosition == (originalPosition + i));
}
}
}
์ง๋ ๋ฏธ์ ์์๋ ๋์๋ฅผ ์์ฑํ๋ ๋ฉ์๋๋ฅผ ์ ์ ํฉํ ๋ฆฌ๋ฉ์๋๋ก ๊ด๋ฆฌํ๊ณ , ์ด๋ฅผ ํ ์คํธํ๊ธฐ ์ํด MockedStatic ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ์. ๋ฌผ๋ก ์ด ๋ฐฉ๋ฒ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์๋ ์์ง๋ง, ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋์์ ํต์ ํ๋ ๋ฐฉ์์ ํ ์คํธํ๊ธฐ์ ์ ์ฐํ์ง๋ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฒ ๋ฏธ์ ์์๋ ํ๋ก๋์ ์ฝ๋๋ฅผ ํ์ฅํ ์ ๋ตํจํด์ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํด๋ณด์์ต๋๋ค. ์ฝ๋๋ก ์ดํด๋ด ์๋ค.
public interface LottoNumberGenerator {
List<Integer> pickNumbers();
}
- ์ ๋ต ํจํด์ ์ ์ฉํ๊ธฐ ์ํด ๋์๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง ํด๋์ค๋ฅผ ์ธํฐํ์ด์ค๋ก ๋๊ณ ,
public class RandomLottoNumberGenerator implements LottoNumberGenerator {
@Override
public List<Integer> pickNumbers() {
List<Integer> numbers = Randoms.pickUniqueNumbersInRange(
LOTTO_MIN_NUMBER.getValue(),
LOTTO_MAX_NUMBER.getValue(),
LOTTO_SIZE.getValue());
return numbers;
}
}
private Lotteries initLotteries(final TicketCount ticketCount) {
return Lotteries.createLotteries(ticketCount, new RandomLottoNumberGenerator());
}
- ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์์ฑํ๊ณ , ๋คํ์ฑ์ ์ด์ฉํ์ฌ RandomNumberGenerator์ pickNumbers๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฑํ์์ต๋๋ค.
- ์ด๋ ๊ฒ ํ๋ก๋์ ์ฝ๋๋ฅผ ํ์ฅํ๊ฒ ๋๋ฉด ํ ์คํธ ์ฉ์ด์ฑ ๋ฟ๋ง ์๋๋ผ, ๋น์ฆ๋์ค ๋ก์ง์ด ๋ฐ๋์์ ๋ ์ ์ฐํ๊ฒ ๊ฐ์๋ผ์ธ ์ ์๋ค๋ ์ฅ์ ๋ ์์ต๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
class LotteriesTest {
LottoNumberGenerator numberGenerator;
Lotteries lotteries;
@BeforeEach
void init() {
numberGenerator = new LottoNumberGenerator() {
@Override
public List<Integer> pickNumbers() {
return List.of(1, 2, 3, 4, 5, 6);
}
};
TicketCount ticketCount = new TicketCount(3);
lotteries = Lotteries.createLotteries(ticketCount, numberGenerator);
}
@DisplayName("ํ๋ ์ด์ด์ ๋ก๋๋ฒํธ ์์ฑ์ ํ
์คํธ")
@Test
void createLotteries_test() {
// given
TicketCount ticketCount = new TicketCount(3);
// when
Lotteries lotteries = Lotteries.createLotteries(ticketCount, numberGenerator);
// then
int expectedSize = ticketCount.count();
int actualSize = lotteries.getLotteries().size();
assertEquals(expectedSize, actualSize);
lotteries.getLotteries().forEach(lotto -> {
List<Integer> numbers = lotto.getNumbers();
assertTrue(numbers.containsAll(numberGenerator.pickNumbers()));
});
}
- LottoNumberGenerator๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ์์ฑํด์ฃผ๊ณ pickNumbers๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํจ์ผ๋ก์จ, ๋์์ ์ ์ดํ ์ ์๊ฒ ๋์์ต๋๋ค.
- ์ด์ฒ๋ผ ์ ๋ต ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ ํ ์คํธ๋ฅผ ์ํด ํ๋ก๋์ ์ฝ๋๋ฅผ ‘์์ ’ํ๋ ๊ฒ์ด ์๋ ‘ํ์ฅ’ํ๋ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
- ๋ฟ๋ง ์๋๋ผ, ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ ์ดํ ๋์์ ๊ตฌํํ ๋ฉ์๋์ ๋ด์ฉ์ ํตํด ๋ช ์์ ์ผ๋ก ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ๋์ฑ ๋ช ํํด์ก๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
4. ์์ฑ์ ๋์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ ์ฉ
public class Lotto {
private final List<Integer> numbers;
public Lotto(final List<Integer> numbers) {
validateLottoNumbers(numbers);
this.numbers = numbers;
}
public static Lotto createWinningLotto(final List<Integer> winningNumbers) {
return new Lotto(winningNumbers);
}
public static Lotto createLotto(final LottoNumberGenerator lottoNumberGenerator) {
return new Lotto(createNumbersWithGenerator(lottoNumberGenerator));
}
- ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ Lotto ํด๋์ค์ ์์ฑ์๋ฅผ public์ผ๋ก ์ด์ด์ฃผ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์๋ฅผ ๋์ ํ์์ต๋๋ค.
public class Lotteries {
private final List<Lotto> lotteries;
private Lotteries(final List<Lotto> lotteries) {
this.lotteries = lotteries;
}
public static Lotteries createLotteries(final TicketCount ticketCount,
final LottoNumberGenerator lottoNumberGenerator) {
List<Lotto> lotteries = IntStream.range(0, ticketCount.count())
.mapToObj(eachTicket -> Lotto.createLotto(lottoNumberGenerator))
.toList();
return new Lotteries(lotteries);
}
public class Statistic {
private static final Integer DEFAULT_COUNT = 0;
private static final Integer FIVE_COUNT = 5;
private static final Integer COUNT = 1;
private final Map<LottoRank, Integer> result;
private Statistic(final Map<LottoRank, Integer> result) {
this.result = result;
}
public static Statistic createStatistic(final List<Integer> matchedNumberCount,
final List<Boolean> containBonusNumber) {
return new Statistic(compileStatistic(matchedNumberCount, containBonusNumber));
}
public class ProfitRate {
private static final Integer PERCENTAGE = 100;
private final Double rate;
private ProfitRate(final Double rate) {
this.rate = rate;
}
public static ProfitRate createProfitRate(final Map<LottoRank, Integer> result, final BuyAmount buyAmount) {
return new ProfitRate(calculateProfitRate(result, buyAmount));
}
- ๋ฌด์๋ณด๋ค ๋ก๋ ํด๋์ค์ ๊ฒฝ์ฐ ๋ฉ์๋์ ๋ช ํํ ๋ค์ด๋ฐ์ ์ค์ ํ์ฌ ์ด๋ฆ์ ๊ฐ์ง ์์ฑ์๋ฅผ ๋ง๋ฆ์ผ๋ก์จ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ฑ ์ฆ๊ฐ์ํฌ ์ ์์์ต๋๋ค.
- ๋น์ฒจ๋ฒํธ์ ๋ก๋๋ฅผ ์์ฑํ๋ ์์ฑ์์ ํ๋ ์ด์ด์ ๋ก๋ ๋ฒํธ๋ฅผ ์์ฑํ๋ ์์ฑ์๋ฅผ ์ธ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๋น์ฒจ๋ฒํธ์ ๋ํ ๋ก๋ ํด๋์ค์, ํ๋ ์ด์ด์ ๋ก๋์ ๋ํ ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ๋ก๋ ๋ฒํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ์๋ง ๋ณ๊ฒฝํ์ฌ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์์ต๋๋ค.
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์์ฑ์๋ฅผ ํตํด ํด๋์ค์ ์ฌ์ฌ์ฉ์ ํตํด ๋ถํ์ํ ์ฝ๋์ ์ค๋ณต์ ๋ง๊ณ , ๋์ ์์ฑ ํด๋์ค์ ์ํด ์์ฑ๋ ๋น์ฒจ๋ฒํธ ๋ํ ๊ฒ์ฆ์ ์ ์ฉํ ์ ์์๊ธฐ ๋๋ฌธ์ ์ฝ๋์์ ๋ฐ์ํ ์ ์๋ ๋ฒ๊ทธ์ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์์ต๋๋ค.
์ด ์ธ์๋ ์ด๋ฒ ๋ฏธ์ ์์๋ ๊ฒ์ฆ์์ ๋ฐ์ํ๋ ์์ธ๋ค์ ๊ตฌ์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , final ํค์๋์ UnmodifiableXXX ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋์ ํจ์๊ฐ ํ๋์ ์ญํ ์ ํ๋๋ก ๊ตฌํํ๋ ๋ฑ ๊น๋ํ๊ณ ๊ตฌ์ฒด์ ์ด๋ฉด์, ์ ๋๋ ๋๋์ ์ค ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ๋ง์ด ๋ ธ๋ ฅํ๋ ๋ฏธ์ ์ด์์ต๋๋ค.
3์ฃผ์ฐจ ์ ์ฒด ์๊ฐ
์ข์ ์ฝ๋, ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ง์ด ๊ณ ๋ฏผํ๋ ํ ์ฃผ์์ต๋๋ค. ๊ทธ๋งํผ ์ด๋ฒ ๋ฏธ์ ์ ๋ฐฐ์๊ฐ๋ ์ ๋ค์ด ๋์ฑ ๋ง์๋ ๋ฏธ์ ์ด์์ต๋๋ค. ๋ฏธ์ ์ ์งํํ ๋๋ ๋ค์ ์ด๋ ค์ ๋ค๊ณ ์ฒด๊ฐํ์๋๋ฐ, ๋ฆฌํํ ๋ง ๊ณผ์ ๊น์ง ๋๋ด๊ณ ์ ์ถ๋ฌธ์ ์ฐ๋ ์์ ์์ ์ด๋ฒ ๋ฏธ์ ์ ๋์๋ณด์์ ๋๋ 1,2์ฃผ์ฐจ ๋ฏธ์ ๊ณผ ๋น์ทํ ๋์ด๋๋ผ๊ณ ๋๊ปด์ก์ต๋๋ค. ๊ทธ๋งํผ ์ด๋ฒ ๋ฏธ์ ์ ์์ฑํด ๋์๊ฐ๋ ๊ณผ์ ์์ 1, 2์ฃผ์ฐจ์ ๋น๊ตํ์์ ๋ ์ฝ๋๋ฅผ ๋ณด๋ ์์ผ๊ฐ ๋ง์ด ๋์ด์ก๊ณ , ๊ฐ์ฒด์งํฅ์ ์ธ ๊ฐ๋ ๋ค์ด ์กฐ๊ธ์ฉ์ด๋๋ง ์ ๋ฆฝ๋์๋ ํ ์ฃผ์์ต๋๋ค. ๋ค์ ์ฃผ๋ฉด ๋ฒ์จ ๋ง์ง๋ง ๋ฏธ์ ์ธ๋ฐ ๋ง์ง๋ง๊น์ง ์ด์ฌํ ํด์ ๊ฒฐ์ค์ ์ ๋งบ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๋ฏธ์ ๋งํฌ
๋ฏธ์ ์ ๋ํ ์ ์ฝ๋๊ฐ ๊ถ๊ธํ์๋ค๋ฉด ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
'๐ Etc > Rev' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422