Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Step2, 로또(자동) #1138

Open
wants to merge 5 commits into
base: minsu-lee
Choose a base branch
from
Open

Step2, 로또(자동) #1138

wants to merge 5 commits into from

Conversation

Minsu-Lee
Copy link

PR요청이 늦어져서 죄송합니다.
야근업무가 잦아져서 생각했던 시간만큼 과제를 진행하지 못한것 같습니다.
이번 PR요청에서 다급함에 선 테스트 코드 작성도 잘지켜지지 않아 아쉬움이 컸었으나,
시간이 너무 지체되는것 같아 우선 PR요청 드립니다.

이번 작업에서 아쉬웠던 부분은 LottoRank를 상속받는 다른 구현체로 대체될때,
DEFAULT_RANK_PRICE가 내부 속성으로 가져가고 싶었으나 지금은 방법이 떠오르지 않아 유지하였습니다.

  • DefaultLottoStatistics, LottoMonitor 내에서 companion object 에 선언된 필드 참조가 아닌 LottoRank의 속성으로 참조하고싶었습니다.
  • 단순 DEFAULT_RANK_PRICE를 반환하는 클래스로 분리하는게 맞을까요?

LottoMachineProcess의 calculateWinningStatistics 메서드 내에서 LottoRank를 상속받아 구현한 DefaultLottoStatistics 객체를 생성하자니, 외부에서 쉽게 대체하긴 힘들겠다 생각되었습니다.
좋은 방법이 있으면 조언부탁드립니다.
PR 잘부탁드리겠습니다. 🙏

Copy link

@BeokBeok BeokBeok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이전 단계 피드백과 로또(자동) 미션하시느라 고생하셨습니다. 👍
고민해볼만한 의견들을 코맨트로 작성하였으니, 충분히 고민해보시고 도전해보세요. 💪

@@ -3,7 +3,7 @@ package calculator.model.input
object InputValidator {
fun validateNumbers(numbers: List<Int>) {
numbers.forEach { number ->
if (number < 0) throw IllegalArgumentException("음수는 계산할 수 없습니다.")
if (number == InputParser.NON_NUMERIC_DEFAULT_VALUE) throw IllegalArgumentException("음수는 계산할 수 없습니다.")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

숫자가 -1이 아닌 음수값이 오면 어떻게 될까요?

Comment on lines +13 to +29
monitor.displayLottoPurchaseAmount()
val totalPurchaseAmount = keyboard.inputLottoPrice()
val lottoCount = process.calculateLottoCount(totalPurchaseAmount)
monitor.displayLottoPurchasesCount(lottoCount)

val lottoTickets = process.generateLottoTickets(lottoCount)
monitor.displayIssuedLottoTickets(lottoTickets)

monitor.displayInputLastWeekLottoWinningNumbers()
val lastWeekNumbers = keyboard.inputLastWeekWinningNumbers()
val lottoStatistics =
process.calculateWinningStatistics(
lottoTickets,
lastWeekNumbers,
totalPurchaseAmount,
)
monitor.displayLottoStatistics(lottoStatistics)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

프로그래밍 요구사항에는 아래와 같은 내용이 있습니다.

함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다.

이 요구사항을 반영해보면 어떨까요?

@@ -0,0 +1,15 @@
package lotto.model.price

class Lotto2024Price(

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클래스명에 년도를 명시해야하는 이유가 있을까요?
그렇다면 해마다 클래스를 추가해야하는걸까요?

override val price: Int = 1000,
) : LottoPrice {
init {
require(price > 0) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로또를 1원 이상 천원 미만 입력하게 되면 어떻게 될까요?

Comment on lines +25 to +31
val DEFAULT_RANK_PRICE =
mapOf(
6 to 2_000_000_000,
5 to 1_500_000,
4 to 50_000,
3 to 5_000,
)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로또 번호가 일치하는 것에 대한 금액을 enum으로 관리해보면 어떨까요?

@@ -0,0 +1,7 @@
package lotto.view.keyboard

interface Keyboard {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keyboard 인터페이스를 구현하는 곳은 MarchineKeyboard 클래스만 존재하네요.
민수님은 언제 인터페이스 - 구현체 구조를 사용하시나요?
현재 구조에서는 Keyboard 인터페이스의 존재 의미가 적어보이는데 민재님은 어떻게 생각하시나요?
(Monitor도 동일)

Comment on lines +51 to +55
if (profitRate > 1.0) {
println("총 수익률은 ${rate}입니다.")
} else {
println("총 수익률은 ${rate}입니다.(기준이 1이기 때문에 결과적으로 손해라는 의미임)")
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수익률 여부에 대해 문구 출력을 잘 구현해주셨네요. 👍


@Test
fun `로또 번호는 1 ~ 45 사이여야 한다`() {
repeat(100) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

100번을 반복하는 것은 어떤 의미를 가질까요?
1~45 사이가 아닌 LottoNumbers를 생성하는 것에 대한 테스트를 작성해보는 것은 어떨까요?

"3000,14000",
],
)
fun `구입금액, 구매가능 개수 테스트`(rawInput: String) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3개부터 6개까지 일치했을 때의 얼마의 상금을 가져갈 수 있는지에 대해서 테스트 코드를 작성해보면 어떨까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants