-
Notifications
You must be signed in to change notification settings - Fork 452
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
[2단계 - 자동차 경주 리팩터링] 허브(방대의) 미션 제출합니다. #538
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.
안녕하세요 :) 허브!
미션 하면서 해보고 싶은 내용 다 해보세요~~ㅋㅋㅋㅋㅋ 납득 가능하게 이유까지 남겨주어서 좋네요!
이번 미션에서 클래스를 최대한 분리해 보는 방향으로 코드를 작성하고 싶어서 Parse 하는 부분도 따로 클래스로 분리를 해보았습니다.
이유는 다음과 같습니다.
2단계 미션을 하면서 신경쓴 부분들을 PR 내용에 남겨주어서 알아차리가 너무 좋았답니다 :)
force push 한 기록들이 있던데요! 혼자 사용하는 브랜치는 force push 해도 상관 없지만 공유하는 브랜치에서 사용하면 커밋내용이 꼬일 수 있어서 하면 지양해야 한다는거 아시죠? (혹시나 해서 코멘트 남겨요! 사실..저도 혼자 사용하는데서는 force push...사용한답니다...ㅎㅎㅎ)
2단계 코멘트 남겨보았습니다! 이상한 부분이 있거나 애매한 부분들이 있다면 알려주세요 >_< 새롭게 시작하는 월요일도 화이팅!
- [x] 자동차는 값을 입력받고 이동한다. | ||
- 4 이상이면 전진한다. | ||
- 3 이하의 값이면 멈춘다. | ||
## 개요 |
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.
업데이트 되는 문서 좋아요! 👍
outputView.printPosition(cars); | ||
racingGame.play(); | ||
List<Car> cars = racingGame.findCurrentCarPositions(); | ||
outputView.printCurrentCarPositions(cars); |
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.
좀 더 명확한 메서드 네이밍으로 변경해주셨군요! :)
private final Name name; | ||
private final Position position; |
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.
오~ 불변객체로~!
@@ -4,7 +4,8 @@ public class Name { | |||
|
|||
private static final int NAME_LOWER_BOUND = 1; | |||
private static final int NAME_UPPER_BOUND = 5; | |||
private static final String INVALID_NAME_LENGTH_MESSAGE = "차의 이름은 1자 이상 ~ 5자 이하여야 합니다."; | |||
private static final String INVALID_NAME_LENGTH_MESSAGE = | |||
"차의 이름은 " + NAME_LOWER_BOUND + "자 이상, " + NAME_UPPER_BOUND + "자 이하여야 합니다. 입력된 차 이름 : "; |
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.
에러메서지가 좀 더 친절해졌군요 :)
if (name.length() < NAME_LOWER_BOUND || NAME_UPPER_BOUND < name.length()) { | ||
throw new IllegalArgumentException(INVALID_NAME_LENGTH_MESSAGE); | ||
private void validate(final String name) { | ||
if (isInvalidNameLength(name)) { |
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.
따로 조건문을 빼주니 validate에서 어떤 내용을 확인해주는지 보기 좋네요~
List<String> carNames = List.of("car1", "car2", "car3"); | ||
|
||
Cars cars = Cars.from(carNames); | ||
@DisplayName("findWinners 메서드는 차량이 존재하지 않는 경우 예외를 던진다.") |
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.
findWinners의 역할은 우승자를 찾는것 아닌가요?
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.
앗! 말씀하신대로 우승자가 존재하지 않는 경우 예외를 던진다.
라는 DisplayName이 더 적절해보입니다! 또한 그에 따른 예외 메시지를 변경하여 적용해보겠습니다!
@@ -7,11 +7,11 @@ | |||
import org.junit.jupiter.params.ParameterizedTest; | |||
import org.junit.jupiter.params.provider.CsvSource; | |||
|
|||
@DisplayName("Car 클래스") |
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.
클래스나 메서드 이런 내용은 DisplayName에 들어가지 않아도 좋을 듯 싶어요 :)
public class CarTest { | ||
|
||
@ParameterizedTest | ||
@ParameterizedTest(name = "move 메서드는 값을 입력받고 4이상인 경우 전진한다. 초기 위치: 0 입력값: {0} 동작 후 위치: {1}") |
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.
👍
|
||
@DisplayName("Cars 클래스") |
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와는 다른 Cars 만의 역할에 대해 테스트를 작성해봐도 좋을 듯 하네요
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.
앗! 말씀하신대로 모든 차들을 반환하는 테스트를 작성하지 않은 것 같습니다!!
또한 등록된 차들의 경주를 진행한다고 생각하여 move 대신 race로 메서드명을 변경했습니다.
@@ -2,7 +2,7 @@ | |||
|
|||
import java.util.Objects; | |||
|
|||
public class Position { | |||
public class Position implements Comparable<Position> { |
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.
Position 클래스의 경우 기본적으로 컴파일러가 생성해주는 생성자를 사용하고 있는데요. 접근 제어자를 활용하여 생성의 범위를 좁히는 건 어떨까요~?
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.
이 부분에 대해서 package-private 생성자를 사용하는게 맞을까요? 일단 도전해보겠습니다!
주말에도 리뷰 남겨주셔서 감사합니다. 리뷰 해주신 부분 개인적으로 생각하여 코드에 반영을 해보았습니다. force push한 걸 들켜버렸군요.. 😢 |
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.
허브, 리뷰 내용 반영한 부분 확인했습니다. 👍
레이싱카 미션 너무 잘 수행해주셨네요! 앞으로도 화이팅입니다~~~~~~
Merge 할게요!
force push 이유가 커밋메세지 때문이었군요. 이미 remote에 push 했다면 force push 말고는 커밋메세지를 변경할 수 있는 방법은 저도 모르겠네요ㅠㅠ
안녕하세요 😄
2단계는 혼자 리팩터링 하는 미션이지만, 1단계 미션에서 남겨주신 리뷰를 통해 페어와 함께 많은 이야기를 나누었습니다.
리뷰 남겨주신 내용이 정말 많은 도움이 되었던 것 같습니다.
리뷰를 기반으로 결정한 내용
제어할 수 없는 부분
위임 메서드 테스트
Count 클래스 테스트를 위한 getter
검증과 변환의 분리
레이싱카 크기의 어플리케이션에서는 이런 부분까지 나눈다면 클래스가 지나치게 많다는 생각입니다.
이 부분에 대해서 전적으로 동의합니다.이유는 다음과 같습니다.
2단계 리팩터링
2단계 요구사항 + 기존의 코드를 리팩터링 하는 시간을 가졌습니다.
페어와 협업을 한다고 가정을 하고, 요구사항을 정리하고 조금 더 상세한 내용을 코드에 담도록 고민했습니다.
기존에 추가하지 못했던 기능 추가
IntelliJ 테스트 실행 결과 메시지 개선
예외 메시지
차 위치 비교 부분 변경
추가로 부족한 부분, 개선을 하면 좋겠다고 생각하시는 부분에 대해 리뷰 남겨주시면 바로 반영하겠습니다!
감사합니다!