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

3단계 - 레이싱게임 #5739

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

Conversation

JongMinCh0i
Copy link

너무 죄송합니다. 지금 27, 28, 29 일 자는 이미 리뷰를 받았던 부분인데
제가 깃헙을 잘 못 만져서 해당 부분도 같이 머지로 PR로 같이 들어갔습니다. 4단계 때는 제대로 하겠습니다...

JongMinCh0i and others added 28 commits September 27, 2024 11:38
- 패키지 네이밍 규칙
  - 이후 작성될 미션들과 구분하기 위해서 별도의 패키지를 생성한다
  - 네이밍 규칙은 step_ + 1,2,3.. 와 같이 점미사에 해당 미션의 회차를 추가한다
- , 혹은 : 구분자와 하나의 숫자를 포함하는 문자열을 전달 받았을 경우 하나의 숫자를 정수형으로 반환한다
- , 혹은 : 구분자와 하나 이상의 숫자를 포함하지 않는 문자열을 전달 받았으면 0을 반환한다
- 추상화 레이어를 활용하여 DI를 통해 유연한 테스트를 수행한다.
- "빈 문자열 또는 null 값을 입력할 경우 0을 반환"
- "음수가 들어올 경우 예외를 처리."
- ", 혹은 : 구분자와 하나 이상의 숫자를 포함하는 문자열을 전달 받았을 경우 구분자를 기준으로 분리한 각 숫자의 합을 정수형으로 반환."
- ", 혹은 : 구분자와 하나의 숫자를 포함하는 문자열을 전달 받았을 경우에 구분자를 기준으로 분리한 숫자를 정수형으로 반환한다."
- ", 혹은 : 구분자와 하나 이상의 숫자를 포함하지 않는 문자열을 전달 받았으면 0을 반환한다."
- customDelimiter 의 전역 키워드 제거
- 전진하는 조건값 이상의 경우 True, 이하의 경우 False 로 구분하여 이를 반환한다.
- 게임 플레이를 위한 자동차 대수와 횟수를 입력
  - 자동차 대수를 정수로 입력받는 기능
  - 경기 횟수를 정수로 입력받는 기능

- 게임에 대한 안내 문구를 출력
  - 자동차 대수가 몇 대 인지 안내문구를 출력하는 기능
  - 시도할 횟수가 몇 회 인지를 안내문구를 출력하는 기능
  - 실행결과 안내 문구를 출력하는 기능
  - 움직이지 않을 경우 별도의 안내 메시지를 출력하는 기능
- gamePlay
  - 입력받은 자동차의 횟수 만큼 List 에 이를 저장하고 반환하는 기능
  - 게임 진행 시 값을 입력받는 Input, 게임 메시지를 출력하는 Output 메서드 호출

- racingCarMoving
  - distance 의 값에 따라서 레이싱 결과를 출력하는 기능
- j 대신 몇 번째 차라는 의미의 numberOfCar 로 파라미터 네이밍 변경
3단계 - 자동차 경주
- 동일한 우승자가 있을 경우 우승자 들을 전부 출력하는 기능
4단계 - 레이싱게임(우승자)
@dhmin5693
Copy link
Member

지난 번 에도 말씀드린 부분이긴 한데,
branch명 변경해서 작업해주세요.

지금은 jongminch0i branch에 작업을 해두셨고 3단계라면 step3로 하셔야 합니다.

어려우시면 DM 주세요.

Copy link
Member

@dhmin5693 dhmin5693 left a comment

Choose a reason for hiding this comment

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

안녕하세요.

책임의 분배 위주의 피드백을 드렸는데요, 우선 branch 이름부터 정리하셨으면 합니다.
이 부분 조금 더 신경써주시고 어려우시면 꼭 DM 부탁드릴게요.

---

- 전진하는 조건
- [ ] 주어진 random 값이 조건 값 이상인지 판별하고 결과에 따라서 이상일 경우 True, 이하일 경우 False 로 반환하는 기능
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
- [ ] 주어진 random 값이 조건 값 이상인지 판별하고 결과에 따라서 이상일 경우 True, 이하일 경우 False 로 반환하는 기능
- [x] 주어진 random 값이 조건 값 이상인지 판별하고 결과에 따라서 이상일 경우 True, 이하일 경우 False 로 반환하는 기능

미리 메모해둔 기능을 모두 완성하셨다면 체크도 해주세요.

}

public void cantDrive(int distance) {
if (distance == 0) {
Copy link
Member

Choose a reason for hiding this comment

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

distance 가 0임을 확인한다는건 UI에 로직이 들어갔다는 이야기입니다.

바퀴가 빠진 내용에 대한 요구사항은 없으므로 삭제 혹은 domain으로의 로직 이동을 고려해주세요.

public class RacingCar {

private int distance = 0;
Random random = new Random();
Copy link
Member

Choose a reason for hiding this comment

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

  1. Random의 접근제한자를 지정하지 않고 default로 설정한 이유가 있을까요?
  2. RacingCar 에서 직접 Random 을 사용한다면 테스트 작성이 어려우셨을 것 같습니다. 이 부분에 대해서는 어떤 점을 느끼셨는지 궁금해요.

Copy link
Author

Choose a reason for hiding this comment

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

  1. default 로 설정한 이유보다는 제가 신경쓰지 못 했습니다.
  2. RacingCar 에서 getRandomValue 를 통해서 랜덤값을 호출하여 테스트를 작성했었습니다. 이 부분이 어렵다고 생각은 들지 않았습니다만, 아래 리뷰를 통해 RacingCar가 랜덤값을 생성하고 있는 것이 옳지 않다고 생각했습니다.

private int distance = 0;
Random random = new Random();

public int drive(int bound, int condition) {
Copy link
Member

Choose a reason for hiding this comment

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

bound는 무작위의 최대값을 정하기 위해 받는 매개변수입니다.
RacingCar 에서 bound를 주입받을 필요가 있을까요?

힌트를 몇 가지 드려보겠습니다.

  1. 0 ~ 9까지 무작위로 점수를 생성하는건 무작위 의 역할입니다. RacingCar의 역할은 아닙니다.
  2. condition 으로 특정 값 이상이면 전진하도록 하고 있습니다. condition은 4로 고정되어 있구요. condition은 누구의 역할일까요? 주입받는 방향으로 설계를 하셨다면 누구의 역할에 더 가까운지 고려해보시면 좋습니다.

return getRandomValue(bound) >= condition;
}

private void Move() {
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
private void Move() {
private void move() {

소문자로 바꿔주세요

Comment on lines +83 to +87
private static void sameWinnder(RacingCar car, int maxDistance, List<String> winners) {
if (car.getDistance() == maxDistance) {
winners.add(car.getName());
}
}
Copy link
Member

Choose a reason for hiding this comment

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

winners를 받아 add하는데에 사용하고 있는데요,
이러면 순수 함수에서 벗어나며 유지보수가 꽤 어려워집니다.

나쁜 방법이라는 건 아니구요, 순수 함수 내용도 찾아보시고 공부해보시면 좋은 내용이기에 말씀드렸습니다.
함수/메소드 사용 시 외부에 변화를 주지 않아 유지보수에 매우 훌륭한 기법입니다.

this.distance = distance;
}

Random random = new Random();
Copy link
Member

Choose a reason for hiding this comment

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

step3에선 위에 있던 Random 이 아래로 내려간 이유가 있나요?
자바에서는 필드를 먼저 쓰고 생성자를 쓰는 규칙이 있습니다.

아 그리고 같은 코드를 step_3, step_4로 정리하다보니 리뷰하는 입장에서도 좀 어려운데요,
다른 의견에서 따로 언급했듯 branch 꼭꼭 신경써주셨으면 합니다.

Copy link
Author

Choose a reason for hiding this comment

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

step 4에서 진행하게 될 때 참고 하겠습니다.

public List<String> findWinners(List<RacingCar> list) {
Collections.sort(list, Comparator.comparingInt(RacingCar::getDistance));

int maxDistance = list.get(list.size() - 1).getDistance();
Copy link
Member

Choose a reason for hiding this comment

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

맨 마지막이 우승자인건 알겠는데 list.get(size-1) 이 한 눈에 이해하기 좋은 로직은 아니라고 생각해요.
자바는 마지막 item을 받아올 수 없어서 어쩔수 없는 해프닝이란 점도 이해합니다.
이런 경우는 메소드로 빼는 것 만으로도 이름을 부여할 수 있어 가독성에 도움이 됩니다.

Copy link
Author

Choose a reason for hiding this comment

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

step 4에서 진행하게 될 때 참고 하겠습니다.

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