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

[로또] 곽상진 미션 제출합니다. #101

Open
wants to merge 59 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
cbe1c2a
docs: README.md 기능 목록 정리
DDangDin Oct 29, 2024
b374aa1
docs: README.md 입력 예외 처리 추가
DDangDin Oct 31, 2024
edbc8af
feat: 로또 구입 금액 입력하는 기능 추가
DDangDin Oct 31, 2024
ddbc8e3
docs: README.md 기능 진행 상황 업데이트
DDangDin Oct 31, 2024
e62260c
feat: 로또 구입 금액 예외 처리 추가
DDangDin Oct 31, 2024
5c46e12
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
cecd603
feat: 로또 발매기에서 로또를 생성하는 기능 추가
DDangDin Oct 31, 2024
d0115aa
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
849f228
feat: 로또 구입 금액에 맞게 로또 발행 기능 추가
DDangDin Oct 31, 2024
7b43241
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
e1f4fc1
refactor: LottoMachine -> LottoGenerator 클래스명 수정
DDangDin Oct 31, 2024
df80913
feat: 발행한 로또 수량 및 오름차순 정렬된 번호 출력 추가
DDangDin Oct 31, 2024
5e8a5dd
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
13f311c
fix: 로또 숫자 발행 시작 범위 수정
DDangDin Oct 31, 2024
d958ddb
feat: 당첨 번호, 보너스 번호를 입력 받는 기능 추가
DDangDin Oct 31, 2024
f432db7
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
6021e91
docs: README.md 예외 처리 추가
DDangDin Oct 31, 2024
8a17141
docs: README.md 기능 분리
DDangDin Oct 31, 2024
d866127
feat: 로또 번호와 당첨 번호를 비교하여 당첨 카운트를 출력
DDangDin Oct 31, 2024
8e5834a
docs: README.md 기능 진행상황 업데이트
DDangDin Oct 31, 2024
838045a
test: Lotto 테스트 추가
DDangDin Oct 31, 2024
762f891
test: LottoGeneratorTest 테스트 코드 추가
DDangDin Oct 31, 2024
6f115ce
docs: README.md 기능명 수정
DDangDin Nov 1, 2024
d59fee2
feat: 로또 번호와 당첨 번호, 보너스 번호와 비교하는 기능 추가
DDangDin Nov 1, 2024
c83442d
refactor: LottoCounter 와 Lotto 클래스 리팩토링
DDangDin Nov 1, 2024
31afe32
docs: README.md 기능 진행상황 업데이트
DDangDin Nov 1, 2024
dd738f3
refactor: LottoCounter 클래스 명 수정 & 리팩토링
DDangDin Nov 1, 2024
aaf8b6d
test: LottoMatcherTest 테스트 코드 추가
DDangDin Nov 1, 2024
56aa11d
refactor: LottoMatch -> LottoNumberMatcher 클래스 명 수정
DDangDin Nov 1, 2024
32fb64f
feat: 로또 번호와 당첨 번호, 보너스 번호를 비교하여 순위를 매기는 기능 추가
DDangDin Nov 1, 2024
cfdbde9
docs: README.md 기능 진행상황 업데이트
DDangDin Nov 1, 2024
4d32272
feat: 수익률 계산 후 당첨 통계 내는 기능 구현
DDangDin Nov 1, 2024
6ce2cca
refactor: 수익률 계산하는 기능 수정
DDangDin Nov 2, 2024
f54b131
test: LottoResultTest 테스트 코드 추가
DDangDin Nov 2, 2024
6bcb6f9
fix: 로또 번호와 당첨 번호 비교하는 기능 수정
DDangDin Nov 2, 2024
6f09c26
test: LottoResultTest 테스트 코드 수정
DDangDin Nov 2, 2024
919cff1
test: LottoResultTest 테스트 코드 메서드 명 수정
DDangDin Nov 2, 2024
b0e9584
refactor: LottoResult 수익률 수정 수정 및 확장함수 추가
DDangDin Nov 2, 2024
92c3db4
docs: README.md 기능 추가
DDangDin Nov 4, 2024
5250349
docs: README.md 기능 수정 및 추가
DDangDin Nov 4, 2024
394143c
feat: 당첨 내역과 수익률을 출력하는 기능 구현
DDangDin Nov 4, 2024
fbef571
docs: README.md 기능 진행상황 업데이트
DDangDin Nov 4, 2024
6b2714e
refactor: 로또 최소, 최대 번호 상수 값을 LottoConstants에 작성
DDangDin Nov 4, 2024
ddddedb
feat: Lotto 클래스 예외 처리 추가
DDangDin Nov 4, 2024
a01a613
test: LottoTest 테스트 코드 추가
DDangDin Nov 4, 2024
5795d35
docs: README.md 기능 진행상황 업데이트 & 추가
DDangDin Nov 4, 2024
35c650c
refactor: MVC 패턴으로 리팩토링
DDangDin Nov 4, 2024
97becde
chore: MVC 패턴 적용으로 인한 테스트 코드 위치 수정
DDangDin Nov 4, 2024
c7180cb
refactor: MVC 패턴 적용 리팩토링
DDangDin Nov 4, 2024
ef19f99
refactor: MVC 패턴에서 각 계층 역할에 맞게 리팩토링
DDangDin Nov 4, 2024
7b60ae4
refactor: Validator 리팩토링
DDangDin Nov 4, 2024
ff9d841
docs: README.md 기능 진행상황 업데이트
DDangDin Nov 4, 2024
2d5f180
test: 역할 별 Validator 테스트 코드 추가
DDangDin Nov 4, 2024
276cb23
feat: 예외 발생 시 메시지 출력 후 다시 입력 받는 기능 구현
DDangDin Nov 4, 2024
5d386a2
docs: README.md 기능 진행상황 업데이트
DDangDin Nov 4, 2024
2aa9d0a
chore: 작은 수정
DDangDin Nov 4, 2024
2e0fcef
fix: 무한 루프 수정
DDangDin Nov 4, 2024
e226138
fix: 무한 루프 수정
DDangDin Nov 4, 2024
5ed3c3d
fix: 출력 텍스트 수정
DDangDin Nov 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor: MVC 패턴에서 각 계층 역할에 맞게 리팩토링
- View 계층이 Model 계층을 의존하지 않게 수정
- 최대한 Controller 계층이 View, Model 계층의 다리 역할을 하게끔 수정
DDangDin committed Nov 4, 2024
commit ef19f993a229bd3a4cfca7984ae87797f016d58a
24 changes: 23 additions & 1 deletion src/main/kotlin/lotto/controller/LottoController.kt
Original file line number Diff line number Diff line change
@@ -2,7 +2,9 @@ package lotto.controller

import lotto.model.Lotto
import lotto.model.LottoGenerator
import lotto.model.LottoRank
import lotto.model.LottoResult
import lotto.model.LottoResultDetail
import lotto.model.toViewData
import lotto.view.LottoInputView
import lotto.view.LottoOutputView
@@ -15,6 +17,8 @@ class LottoController(
private var lottoList = listOf<Lotto>()
private var winningNumbers = listOf<Int>()
private var bonusNumber = 0
private val printableRankList = mutableListOf<String>()
private val winningRankCountList = mutableListOf<Int>()

fun purchaseLotto() {
outputView.outputPurchasePrice()
@@ -41,6 +45,24 @@ class LottoController(
fun showLottoResult() {
val lottoResult = LottoResult(lottoList, winningNumbers, bonusNumber)
val lottoResultDetail = lottoResult.getResult()
outputView.outputLottoResult(lottoResultDetail)
val roundedRateOfReturn = lottoResultDetail.roundedRateOfReturnText

calculateRankList(lottoResultDetail)

outputView.outputLottoResult(
printableRankList = printableRankList,
winningRankCountList = winningRankCountList,
rateOfReturn = roundedRateOfReturn
)
}

private fun calculateRankList(lottoResultDetail: LottoResultDetail) {
LottoRank.entries.forEach { rank ->
if (rank != LottoRank.NOTHING) {
val rankCount = lottoResultDetail.winningRankList.count { it == rank }
winningRankCountList.add(rankCount)
printableRankList.add(rank.print())
}
}
}
}
4 changes: 2 additions & 2 deletions src/main/kotlin/lotto/model/LottoResultDetail.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package lotto.model

data class LottoResultDetail(
val lottoRankList: List<LottoRank>,
val winningRankList: List<LottoRank>,
val rateOfReturn: Double
) {
val roundedRateOfReturn: String
val roundedRateOfReturnText: String
get() = String.format("%.1f", rateOfReturn)
}
4 changes: 4 additions & 0 deletions src/main/kotlin/lotto/util/LottoOutputText.kt
Original file line number Diff line number Diff line change
@@ -11,4 +11,8 @@ object LottoOutputText {
const val FIVE_AND_BONUS_MATCHES = "5개 일치, 보너스 볼 일치"
const val SIX_MATCHES = "6개 일치"
const val EMPTY = ""
const val LOTTO_WINNING_RESULT_TITLE = "당첨 통계"
const val LOTTO_WINNING_RESULT_SEPARATE_LINE = "---"
const val LOTTO_WINNING_RESULT_TOTAL_RATE_OF_RETURN = "총 수익률은"
const val LOTTO_WINNING_RESULT_TOTAL_RATE_OF_RETURN_2 = "%입니다."
}
26 changes: 15 additions & 11 deletions src/main/kotlin/lotto/view/LottoOutputView.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package lotto.view

import lotto.model.LottoRank
import lotto.model.LottoResultDetail
import lotto.util.LottoOutputText

class LottoOutputView {
@@ -26,16 +24,22 @@ class LottoOutputView {
println(LottoOutputText.INPUT_BONUS_NUMBER)
}

fun outputLottoResult(lottoResultDetail: LottoResultDetail) {
fun outputLottoResult(
printableRankList: List<String>,
winningRankCountList: List<Int>,
rateOfReturn: String,
) {
println()
println("당첨 통계")
println("---")
LottoRank.entries.forEach { rank->
if (rank != LottoRank.NOTHING) {
val rankCount = lottoResultDetail.lottoRankList.count { it == rank }
println("${rank.print()} - ${rankCount}개")
}
println(LottoOutputText.LOTTO_WINNING_RESULT_TITLE)
println(LottoOutputText.LOTTO_WINNING_RESULT_SEPARATE_LINE)

printableRankList.forEachIndexed { index, printableRank ->
println("$printableRank - ${winningRankCountList[index]}개")
}
println("총 수익률은 ${lottoResultDetail.roundedRateOfReturn}%입니다.")

println(
"${LottoOutputText.LOTTO_WINNING_RESULT_TOTAL_RATE_OF_RETURN} " +
"$rateOfReturn${LottoOutputText.LOTTO_WINNING_RESULT_TOTAL_RATE_OF_RETURN_2}"
)
}
}
4 changes: 2 additions & 2 deletions src/test/kotlin/lotto/model/LottoResultTest.kt
Original file line number Diff line number Diff line change
@@ -29,7 +29,7 @@ class LottoResultTest {
val actual = lottoResult.getResult()

assertEquals(expectedRateOfReturn, actual.rateOfReturn)
assertEquals(expectedLottoRankList, actual.lottoRankList)
assertEquals(expectedLottoRankList, actual.winningRankList)
}

@Test
@@ -42,7 +42,7 @@ class LottoResultTest {
val actual = lottoResult.getResult()

assertEquals(expectedRateOfReturn, actual.rateOfReturn)
assertEquals(expectedLottoRankList, actual.lottoRankList)
assertEquals(expectedLottoRankList, actual.winningRankList)
}

companion object {