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

Step5: 자동차 경주 리팩터링 #5828

Open
wants to merge 2 commits into
base: maeng24
Choose a base branch
from

Conversation

maeng24
Copy link

@maeng24 maeng24 commented Oct 26, 2024

Step5: 자동차경주 리팩터링

  • 패키지를 도메인 / 뷰로 나누었습니다.
  • 나누어진 패키지의 소스를 토대로, 도메인 패키지의 로직이 뷰 패키지의 로직에 의존하지 않도록 코드를 수정하였습니다.
  • 기존 테스트 코드에서 불필요하게 input view를 참조해야했던 코드를 제거하였습니다 (의존성이 없어지며 factory 코드를 그대로 사용할 수 있게 되었습니다)

질문사항

  • 새로 추가된 로직 중 if문을 사용하는 로직이 있습니다. 들어온 숫자와 레이스 횟수를 비교하는 로직인데, if문을 사용하지 않고 분기를 할 방법이 생각나지 않았습니다.. 더 이상 리팩토링이 진행되지 않는다면, 코드를 모두 삭제하고 새로 개발해 보라는 조언을 문서에서 본 기억이 있습니다. 이런 경우도 관련 로직들을 모두 지우고 다른 방법으로 개발을 다시 진행해 보는 편이 좋을까요?? 조언 부탁드리겠습니다!

- view 로직을 domain 로직에서 분리하여 개발하였습니다.
- 소스들을 용도에 맞는 패키지로 분리하여 넣었습니다.
- view 로직을 domain 로직에서 분리하여 개발하였습니다.
- factory 로직이 input view 로직에 의존하지 않도록 리팩토링하였습니다.
Copy link

@mskangg mskangg left a comment

Choose a reason for hiding this comment

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

5단계도 잘 구현해주셨네요 👍
피드백 남겨드렸는데, 확인부탁드립니다. 🙇

Comment on lines +3 to +9
# Step5
## 요구사항
* MVC 패턴 기반으로 리팩토링해 view 패키지의 객체가 domain 패키지 객체에 의존할 수 있지만, domain 패키지의 객체는 view 패키지 객체에 의존하지 않도록 구현한다.

## 진행 목록
-[x] 도메인 로직에 있는 view 로직을 찾아 리팩토링 한다.

Copy link

Choose a reason for hiding this comment

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

👍

@@ -1,4 +1,4 @@
package step4;
package step4.domain;
Copy link

Choose a reason for hiding this comment

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

코드를 모두 삭제하고 새로 개발해 보라는 조언을 문서에서 본 기억이 있습니다. 이런 경우도 관련 로직들을 모두 지우고 다른 방법으로 개발을 다시 진행해 보는 편이 좋을까요?? 조언 부탁드리겠습니다!

리팩토링이 잘되었는지 코드를 실행해보려고 하는데, main 을 못찾아서 실행을 못했어요
혹시 어떻게 실행해서 경주를 만드셨을까요?
아래와 같은 결과물을 확인하고 싶어서요 🤔

경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).
pobi,crong,honux
시도할 회수는 몇회인가요?
5

실행 결과
pobi : -
crong : -
honux : -

pobi : --
crong : -
honux : --

pobi : ---
crong : --
honux : ---

pobi : ----
crong : ---
honux : ----

pobi : -----
crong : ----
honux : -----

pobi : -----
crong : ----
honux : -----

pobi, honux가 최종 우승했습니다.

이왕 얘기가 나온김에 코드를 전부 삭제하고 TDD 로 작성해보시는건 어떨까요?
코드를 전부 작성해보셨을테니 도메인의 이해도는 많이 높아졌을거라 예전보다 구현하시는데에 큰 어려움은 없으실거에요!

main 도 작성해서 코드가 실행되게도 부탁드립니다! 🙇

Copy link
Author

Choose a reason for hiding this comment

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

넵! main 작성을 �넣어보겠습니다.
프린트 테스트시에는 MockOutput대신 ConsoleOutput을 선언해서 테스트를 진행했었습니다. ㅎㅎ;;

TDD로 아예 처음부터 작성해보겠습니다!

}
RacingCarResultView.printRacingCarWinner(outputView, this);
public Integer compareNumberOfRace(int compareNumber) {
if (this.numberOfRace > compareNumber)
Copy link

Choose a reason for hiding this comment

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

Suggested change
if (this.numberOfRace > compareNumber)
return Integer.compare(this.numberOfRace, compareNumber);

단순 값비교라면 위처럼 바꿀 수 있습니다.

그런데, 이 구조보단 RacingCar 가 횟수를 가지고 있으니 횟수만큼 반복해서 racing 을 하는 책임을 할당하는게 더 나을것 같아요

Copy link
Author

@maeng24 maeng24 Oct 27, 2024

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