-
Notifications
You must be signed in to change notification settings - Fork 412
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] 자동차 경주 (우승자) #1755
base: sarahan774
Are you sure you want to change the base?
[STEP4] 자동차 경주 (우승자) #1755
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전 단계 피드백과 자동차 경주(우승자) 미션하시느라 고생하셨습니다. 👍
고민해볼만한 의견들을 코맨트로 작성하였으니, 충분히 고민해보시고 도전해보세요. 💪
init { | ||
require(name.length <= MAX_CAR_NAME_LENGTH) { | ||
"Car name is too long ! (max length = $MAX_CAR_NAME_LENGTH, current = ${name.length})" | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
init 블록을 활용한 유효성 검사 👍
fun List<GameRound>.getMaxDistanceRecords(): List<Record> { | ||
check(this.isNotEmpty()) | ||
val finalRecords = this.last().records | ||
val maxDistance = finalRecords.maxOf { it.distance } | ||
return finalRecords.filter { it.distance == maxDistance } | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우승자를 조회하는 로직을 RacingGame 파일 내 extension으로 구현해주셨네요.
지금도 좋지만, 우승자와 관련된 책임을 갖도록 구조를 변경하여 우승자와 관련된 로직의 추가 또는 변경이 생기더라도 관련된 곳만 수정할 수 있도록 개선해보면 어떨까요?
@@ -1,13 +1,18 @@ | |||
package week1.racing.view | |||
|
|||
class InputView { | |||
fun readStringsAndSplit(promptMessage: String, separator : String = ","): List<String> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
함수명만 보면 "문자열을 읽고 쪼갠다" 라고 이해가 되는데요.
함수는 한 가지 기능만 하도록 개선해보면 어떨까요?
|
||
class ResultView { | ||
|
||
fun printResult(rounds: List<GameRound>) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
함수명만 보면 "결과를 출력한다" 라고 이해가 되는데요.
출력과 관련된 요구사항이 늘어날수록 이 함수는 점점 커지게 되어 두 가지 이상의 일을 하게 될 것 같습니다. 🤔
함수는 한 가지 일만 하도록 개선해보면 어떨까요?
// winner 선정 검증 | ||
@Test | ||
fun `{given} nonEmptyListOfCarNames & nonZeroNumberOfRounds & 항상 모든 차가 전진할 경우 {when} start() {then} getMaxDistanceRecords() 사이즈 == 총 차 대수`() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우승자를 간단하게 확인해볼 수 있도록 개선해보면 어떨까요?
가령, RacingCar 객체를 생성하고 이 객체들 중에 누가 우승인지 판단할 수 있다면 간단해질 것 같습니다.
- InputView 의 함수 역할 쪼개기 - ResultView 의 함수 역할 쪼개기 - RacingGame 이 우승자 명단을 반환하도록 API 수정 - RacingGameTest 수정
피드백 미리 감사드립니다!!!