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

Step4 수동 로또 #1134

Open
wants to merge 28 commits into
base: goodbyeyo
Choose a base branch
from

Conversation

goodbyeyo
Copy link

안녕하세요 🙂

수동 로또 리뷰 부탁드립니다.

참 PR 요청하는데 Can’t automatically merge. 메세지가 뜨는데 왜 그런걸까요? 🥲

그리고 DTO 는 메서드로 접근하지 않고 바로 필드에 접근해도 괜찮은지 선호님의 생각이 궁금합니다.

goodbyeyo and others added 24 commits December 14, 2024 23:43
1. WinningLotto 제거하고 담당하던 책임 LottoTicket 으로 이동
2. LottoTicket 프로퍼티 변경 : List<Int> -> Set<LottoNumber>
3. LottoTicket 프로퍼티 기반으로 위임하도록 변경, 부생성자 추가
4. LottoTicket 정적팩토리메서드 추가
* feat: Lotto 도메인 테스트 및 구현

* feat: 로또 번호, 티켓 발급 기능 구현 및 테스트

* refactor: Test 코드 내 도메인 로직 Class 분리 리팩토링

* feat: 당첨 로또 기능 구현

* feat: 로또 컨트롤러, 입출력 뷰 구현

* refactor: 피드백 반영, LottoTickets.calculateLottoRank 테스트 추가

* refactor: 피드백 반영
1. WinningLotto 제거하고 담당하던 책임 LottoTicket 으로 이동
2. LottoTicket 프로퍼티 변경 : List<Int> -> Set<LottoNumber>
3. LottoTicket 프로퍼티 기반으로 위임하도록 변경, 부생성자 추가
4. LottoTicket 정적팩토리메서드 추가

* doc: STEP3 로또2등 요구구사항 정리

* feat: 보너스번호 도메인 구현

* feat: 보너스 번호 일치여부 구현

* feat: 로또 2등 기능 구현
1. LottoRank : 로또 랭크 판단 조건, 상금 변경
2. LottoTicket : 당첨 로또 계산 위임(WinningLotto)
3. LottoTicket : data class 변경 (피드백 반영)
4. 당첨 로또 계산 시 보너스 번호가 포함된 WinningLotto 전달
5. 당첨 결과 출력 보너스 번호 일치 여부 출력
6. 테스트 코드 2등 로또 반영

* refactor: 피드백 반영
1. BonusNumber 제거하고 WinningLotto 가 직접 책임을 담당하도록 변경
2. WinningLotto 생성자 인자 팩토리 메서드(동반 객체 메서드) 구조로 전달
3. LottoNumber 정적 팩터리 메서드 추가
* feat: Lotto 도메인 테스트 및 구현

* feat: 로또 번호, 티켓 발급 기능 구현 및 테스트

* refactor: Test 코드 내 도메인 로직 Class 분리 리팩토링

* feat: 당첨 로또 기능 구현

* feat: 로또 컨트롤러, 입출력 뷰 구현

* refactor: 피드백 반영, LottoTickets.calculateLottoRank 테스트 추가

* refactor: 피드백 반영
1. WinningLotto 제거하고 담당하던 책임 LottoTicket 으로 이동
2. LottoTicket 프로퍼티 변경 : List<Int> -> Set<LottoNumber>
3. LottoTicket 프로퍼티 기반으로 위임하도록 변경, 부생성자 추가
4. LottoTicket 정적팩토리메서드 추가

* doc: STEP3 로또2등 요구구사항 정리

* feat: 보너스번호 도메인 구현

* feat: 보너스 번호 일치여부 구현

* feat: 로또 2등 기능 구현
1. LottoRank : 로또 랭크 판단 조건, 상금 변경
2. LottoTicket : 당첨 로또 계산 위임(WinningLotto)
3. LottoTicket : data class 변경 (피드백 반영)
4. 당첨 로또 계산 시 보너스 번호가 포함된 WinningLotto 전달
5. 당첨 결과 출력 보너스 번호 일치 여부 출력
6. 테스트 코드 2등 로또 반영

* refactor: 피드백 반영
1. BonusNumber 제거하고 WinningLotto 가 직접 책임을 담당하도록 변경
2. WinningLotto 생성자 인자 팩토리 메서드(동반 객체 메서드) 구조로 전달
3. LottoNumber 정적 팩터리 메서드 추가
1. LottoNumber private 생성자로 변경
2. LottoNumber 필드 접근을 위한 메서드 추가
 - LOTTO_NUMBER_POLL 활용하도록 LottoNumber 생성자 대신 정적 팩토리 메서드 호출
* feat: Lotto 도메인 테스트 및 구현

* feat: 로또 번호, 티켓 발급 기능 구현 및 테스트

* refactor: Test 코드 내 도메인 로직 Class 분리 리팩토링

* feat: 당첨 로또 기능 구현

* feat: 로또 컨트롤러, 입출력 뷰 구현

* refactor: 피드백 반영, LottoTickets.calculateLottoRank 테스트 추가

* refactor: 피드백 반영
1. WinningLotto 제거하고 담당하던 책임 LottoTicket 으로 이동
2. LottoTicket 프로퍼티 변경 : List<Int> -> Set<LottoNumber>
3. LottoTicket 프로퍼티 기반으로 위임하도록 변경, 부생성자 추가
4. LottoTicket 정적팩토리메서드 추가

* doc: STEP3 로또2등 요구구사항 정리

* feat: 보너스번호 도메인 구현

* feat: 보너스 번호 일치여부 구현

* feat: 로또 2등 기능 구현
1. LottoRank : 로또 랭크 판단 조건, 상금 변경
2. LottoTicket : 당첨 로또 계산 위임(WinningLotto)
3. LottoTicket : data class 변경 (피드백 반영)
4. 당첨 로또 계산 시 보너스 번호가 포함된 WinningLotto 전달
5. 당첨 결과 출력 보너스 번호 일치 여부 출력
6. 테스트 코드 2등 로또 반영

* refactor: 피드백 반영
1. BonusNumber 제거하고 WinningLotto 가 직접 책임을 담당하도록 변경
2. WinningLotto 생성자 인자 팩토리 메서드(동반 객체 메서드) 구조로 전달
3. LottoNumber 정적 팩터리 메서드 추가
Copy link

@vsh123 vsh123 left a comment

Choose a reason for hiding this comment

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

안녕하세요!

step4 구현 잘해주셨네요 💯
몇가지 코멘트를 남겼으니 확인부탁드릴게요~!

return PurchaseDetail(purchaseAmount, manualLottoTickets)
}

private fun getManualLottoTickets(manualLottoQuantity: Int): LottoTickets {
Copy link

Choose a reason for hiding this comment

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

LottoTicket을 만드는 책임이 View에 있는 것 같아요! 자동로또와 동일�한 레벨로 옮겨보면 어떨까요?

Comment on lines 22 to 29
repeat(manualLottoQuantity) {
val line = readlnOrNull()?.takeIf { it.isNotBlank() } ?: throw IllegalArgumentException("로또 번호를 입력해주세요.")
val numbers =
line.split(DELIMITER)
.map { it.trim().toIntOrNull() ?: throw IllegalArgumentException("로또 번호는 숫자여야 합니다.") }
manualLottoTickets.add(LottoTicket.from(numbers.toSet()))
}
return LottoTickets(manualLottoTickets)
Copy link

Choose a reason for hiding this comment

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

https://kotlinlang.org/docs/constructing-collections.html#initializer-functions-for-lists

위 문서를 참고하여 mutableListOf없이 만드는 법도 알아보시면 좋을 것 같습니다!

import lotto.domain.LottoTickets
import lotto.domain.LottoTickets.Companion.LOTTO_TICKET_PRICE

data class PurchaseDetail(
Copy link

Choose a reason for hiding this comment

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

그리고 DTO 는 메서드로 접근하지 않고 바로 필드에 접근해도 괜찮은지 선호님의 생각이 궁금합니다.

getPurchaseAmount가 아닌 purchaseAmount를 바로 호출하는 것과 관련해서 말씀주시는게 맞을까요??

https://velog.io/@paulus0617/kotlin-getter-setter 요글을 읽어보시면 프로퍼티는 필드(Field)와 접근자 메서드(getter, setter)를 하나로 합친 것을 의미합니다. 라고 되어있는데요!

그래서 코틀린 진영에서는 필드가 아닌 프로퍼티라는 네이밍으로 사용하고 있습니다 :)

디컴파일 해보시면 실제 javaCode에서는 getPurchaseAmount 를 통해 접근하시는걸 확인하실 수 있을거에요!

혹시 제가 질문을 잘 못이해한거라면 다시한번 말씀부탁드림니다!

import lotto.domain.LottoTickets.Companion.LOTTO_TICKET_PRICE

data class PurchaseDetail(
val purchaseAmount: Int,
Copy link

Choose a reason for hiding this comment

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

https://edu.nextstep.camp/s/l3Ppxbm8/ls/ROS71xiT 에 보면 모든 원시 값과 문자열을 포장한다. 라고 되어있는데요!! purchaseAmout도 Money와 같은 객체로 포장해볼 수 있지 않을까요??

Comment on lines 17 to 18
purchaseAmount: Int,
manualLottoTickets: LottoTickets,
Copy link

Choose a reason for hiding this comment

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

부생성자와 팩터리 메서드 두가지 방식으로 구현이 가능했을 것 같은데요!

부생성자 방식을 선택하신 이유가 있을까요! 혹은 상욱님만의 기준이 있을까요?

- InputView 로또 생성 역할 위임 -> LottoTicket
- immutableList 사용하도록 변경
1. purchaseAmount 원시값 포장
2. PurchaseDetail 팩터리 메서드 추가
1. purchaseAmount 원시값 포장
2. PurchaseDetail 팩터리 메서드 추가
Copy link

@vsh123 vsh123 left a comment

Choose a reason for hiding this comment

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

안녕하세요! :)

리뷰 반영까지 잘 해주셨네요~!
DM으로 코멘트 드린 부분만 확인한번 부탁드립니다!

마지막까지 화이팅하세요! :)

@@ -19,13 +19,21 @@ class LottoTickets(private val lottoTickets: List<LottoTicket>) : Collection<Lot
}

companion object {
private const val LOTTO_TICKET_PRICE = 1000
const val LOTTO_TICKET_PRICE = 1000

fun purchase(amount: Int): LottoTickets {
Copy link

Choose a reason for hiding this comment

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

해당 함수는 이제 미사용으로 보이네요! :)

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.

2 participants