[1단계 - 자동차 경주 구현] 유콩(김유빈) 미션 제출합니다. by kyukong · Pull Request #295 · woowacourse/java-racingcar

[2단계 - 자동차 경주 구현] 유콩(김유빈) 미션 제출합니다. by kyukong · Pull Request #391 · woowacourse/java-racingcar

메소드 역할

public int splitAndSum(String text) {
	if (!isValidValues(text)) {
		return 0;
	}

	int[] numbers = stringToIntArray(getValues(text));
	checkNumbers(numbers);
	return add(numbers);
}

Untitled

하나의 메소드가 두 개의 역할을 맡고 있다는 피드백을 받았다. 수정 전의 메소드는 1. 빈값인지 확인 후 빈값일 경우 0 반환 2. 음수인지 검증하고 더한 값 반환 이라는 두 가지 역할을 담당하고 있었다. 입력한 값이 빈값인지 아닌지에 따라 실행되는 코드가 다른 것이다. 피드백을 받고 다음과 같이 코드를 수정하였다.

public int splitAndSum(String text) {
	text = replaceEmpty(text);
	return sum(getSplitNumbers(text));
}

빈값일 경우 0으로 치환한 값을 반환하고 그 값을 더했다. 빈값이냐에 따라 과정을 달리하지 않도록 수정하였다. 메소드가 하는 역할을 축소하고 분리함으로써 코드를 수정할 때 어느 부분을 수정할지 명확해졌다.

메소드명 - 메소드의 역할

private int add(int[] numbers) {
	if (numbers.length == 1) {
		return numbers[0];
	}
	int result = 0;
	for (int i : numbers) {
		result += i;
	}
	return result;
}

Untitled

포괄적인 의미를 가지는 메소드 addsum 으로 바꾸어 주어진 모든 값들의 합을 반환 한다는 의미를 명시적으로 나타내었다.

원시값 포장 - 객체 역할 부여

public class Attempt {
	private final int attempt;

  public Attempt(int attempt) {
    this.attempt = attempt;
  }

  public boolean isSame(int nowAttempt) {
    return attempt == nowAttempt;
  }
}

경주의 횟수를 객체로 생성하여 시도 횟수에 관한 로직을 Attempt 객체에게 위임하였다.

테스트를 위한 생성자 - 프로그램 역할

public Car(String name, int position) {
	checkValidName(name);
	checkValidPosition(position);
	this.name = name;
	this.position = position;
}

Untitled

Untitled

Untitled