-
Notifications
You must be signed in to change notification settings - Fork 411
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
[step5] 자동차 경주 리팩토링 #1562
base: dding94
Are you sure you want to change the base?
[step5] 자동차 경주 리팩토링 #1562
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.
리뷰가 늦어져 죄송합니다 😢
5단계 미션 고생 많으셨어요!
이번 단계 미션의 요구사항을 이미 잘 충족하셔서, 크게 피드백 드릴 부분이 없었네요!
미션을 이만 마무리 짓고 싶으시다면 DM이나 코멘트 남겨주시고,
시도해보고 싶으신 부분들이 있으시다면 반영 후 리뷰 요청 해주세요!
val cars = racingGame.run(attemptNumber, carNames) | ||
val racingHistory = cars.getRacingHistory() |
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.run() 을 호출했을 때, cars를 받아올 수도 있겠지만 바로 racingHistory를 반환해봐도 좋겠네요!
레이싱 결과를 모두 담은 객체를 만들어보는 것도 선택해볼 수 있겠어요 :)
fun copy(): Car { | ||
return Car(name, moveCount) | ||
} |
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.
Car는 가변 객체인데, copy를 꼭 해야할까요?
History 객체를 만들어낼 때는 Car를 직접 갖게 해볼 수도 있지만, Car가 갖고 있는 값만을 꺼내와서 저장해도 좋아보여요 :)
History객체에서 Car 객체를 직접 갖게해보려면, Car는 불변객체로 만들어보는 건 어떨까요?
fun getRacingHistory(): RacingHistory { | ||
return racingHistory | ||
} |
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.
멤버변수인 racingHistory를 공개하면 getter를 따로 만들지 않아도 되겠네요 :)
private val rounds: MutableList<List<Car>> = mutableListOf() | ||
) { |
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.
컬렉션이 이중 삼중 겹쳐있는 것은 어떤 것을 저장할 지 의미를 녹여내기는 어려워보여요.
먼저 안쪽의 컬렉션을 일급 컬렉션으로 묶어보는 건 어떨까요?
val movingCarNames = listOf("T1") | ||
val stopCarNames = listOf("S1", "S2") | ||
val attemptNumber = 5 | ||
|
||
val movingCars = Cars(movingCarNames.map { Car(it) }, AlwaysMoveStrategy()) | ||
val stopCars = Cars(stopCarNames.map { Car(it) }, NeverMoveStrategy()) | ||
|
||
repeat(5) { | ||
movingCars.moveCars() | ||
stopCars.moveCars() | ||
} | ||
movingCars.moveCars(attemptNumber) | ||
stopCars.moveCars(attemptNumber) | ||
|
||
val allCars = Cars(movingCars.getCars() + stopCars.getCars()) | ||
val allCars = Cars(movingCars.cars + stopCars.cars) | ||
|
||
val winners = allCars.getWinners() | ||
|
||
winners.size shouldBe movingCars.getCars().size | ||
winners.size shouldBe movingCars.cars.size | ||
winners.map { it.name } shouldContainExactly movingCarNames |
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.
#1506 (comment) 여전히 유효한 피드백이에요 :)
Cars객체를 직접 실행해서 값을 초기화 하기 보다, 이미 초기 값을 가진 자동차를 생성해서 초기화해보는 건 어떨까요?
검증하고자 하는 메서드는 allCars.getWinners()
이니, 이 테스트에서 최대한 Cars 객체의 다른 메서드의 의존관계를 떼어내볼 수 있겠어요 :)
안녕하세요 리뷰어님.
엄청 많이 늦어졌네요 하하...
step4 에서 말씀해주신 코드리뷰 토대로 리팩토링을 진행해봤습니다.
이번 미션동안 코드리뷰 꼼꼼하게 해주셔서 감사합니다.
미션 진행하면서 점점 발전해가는 느낌을 좀 느꼈습니다!
해당 미션도 많은 피드백 부탁드리겠습니다!