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

Implement racing car game #16

Open
wants to merge 13 commits into
base: 구미향
Choose a base branch
from
Open

Conversation

myangw
Copy link

@myangw myangw commented Jan 10, 2020

ㅠㅠ 결국 test 다 못짰어요......
하려다가 못한것들은 TODO로 남겨놓았습니다

@myangw myangw changed the title 구미향 Implement racing car game Jan 11, 2020
Copy link
Contributor

@kwangilcho kwangilcho left a comment

Choose a reason for hiding this comment

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

전체적으로 구현하신 메서드에 접근제한자가 설정이 되어있지 않은 것 같습니다.
혹시 어떤 이유가 있을까요? (예를 들면 private method의 테스트를 하고 싶다든지..)

구현하느라 고생하셨습니다! :-)
몇 가지 코멘트 남겼어요!

import java.util.List;
import org.junit.jupiter.api.Test;

class CarGameStarterTest {
Copy link
Contributor

Choose a reason for hiding this comment

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

이 클래스 내에 인덴트 레벨이 서로 조금 다른 것 같아요!

System.out.println("경주할 자동차 이름을 입력하세요.");
Scanner scan = new Scanner(System.in);
String carNameInput = scan.nextLine();
String[] carArr = carNameInput.split(",");
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
String[] carArr = carNameInput.split(",");
carNames = Arrays.asList(carNameInput.split(","));

29, 30 라인에 있는 String[] -> List 변환 작업을 위처럼 한 줄로 해볼 수도 있을 것 같네요.

getCarNamesFromUser();
getNumOfTrialFromUser();
List<Car> cars = carNames.stream()
.map(carName -> new Car(carName))
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
.map(carName -> new Car(carName))
.map(Car::new)

람다 레퍼런스를 쓰면 조금 더 깔끔해질 수 있습니다!

return createGame(trialNum, cars);
}

CarGame createGame(int trialNum, List<Car> cars) {
Copy link
Contributor

Choose a reason for hiding this comment

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

new CarGame과 createGame이 같은 레이어인 것 같은데, 조금 과한 추상화가 아닌지 생각해보게 됩니다.

@@ -0,0 +1,27 @@
class CarResult {
private String name;
private int trialNum;
Copy link
Contributor

Choose a reason for hiding this comment

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

사용하지 않는 trialNum을 CarResult가 가지고 있는 것 같습니다.


class GameResult {
private List<GameSnapshot> snapshots = new ArrayList<>();
private List<Car> winners = new ArrayList<>();
Copy link
Contributor

Choose a reason for hiding this comment

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

현재는 사용하지 않는 winners인 것 같습니다.
만들 당시에는 어떤 뜻이 있었을 것 같은데.. 무언가 꽃 피우지 못한 변수랄까..

this.snapshots = snapshots;
}

void printResults() {
Copy link
Contributor

Choose a reason for hiding this comment

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

클래스 이름에서 result가 들어가 있어 충분히 많은 정보가 사용하는 측에 전달되는 것 같습니다.
메서드에서 두 번 result라는 단어를 사용하지 않아도 되지 않을까요?

printWinners(winners);
}

void printWinners(List<CarResult> winners) {
Copy link
Contributor

Choose a reason for hiding this comment

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

각 게임의 스냅샷을 객체 내부에 가지고 있다면, winners를 외부에서 받을 필요 있을까요?
winner는 언제 계산 되어지는 것이 좋을까요?

for (GameSnapshot snapshot : snapshots) {
snapshot.printOneTrial();
}
List<CarResult> winners = Judge.pickWinners(snapshots.get(snapshots.size() - 1));
Copy link
Contributor

Choose a reason for hiding this comment

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

현재는 우승자가 결과를 출력할 때 필요하기 때문에 결과를 출력하는 메서드 안에서 우승자를 선별하는 일까지 모두 하고 있는데,
요구사항이 추가되어 우승자를 사용하는 곳이 이곳 저곳 여러 군데가 된다면 어떻게 될까요?

참조할만한 문서: 개방-폐쇄 원칙

this.movement = this.movement + "-";
CarResult move() {
trialNum += 1;
if (RandomGenerator.getNumber() > 3) {
Copy link
Contributor

Choose a reason for hiding this comment

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

이 코드를 처음 보는 ㅡ 요구사항을 모르는 독자 ㅡ 개발자는 이 조건문이 왜 필요한지, 어떤 목적인지 모를 것 같아요.
매직넘버 사용을 피하고, 조건의 의도가 드러나도록 추상화하면 좋을 것 같습니다!

@myangw
Copy link
Author

myangw commented Feb 10, 2020

코드리뷰 정말 감사합니다 ㅜㅜ
손을 댈수록 처음부터 다시 짜고싶어지는데 리팩토링 의 범위 내에서 ㅋㅋ 남겨주신 코멘트 기반으로 수정했어요. 접근제한자는...무슨생각이었는지 모르겠네요 이것도 수정했습니다. 고마워요!

@myangw myangw requested a review from kwangilcho February 10, 2020 22:45
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