[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);
}
하나의 메소드가 두 개의 역할을 맡고 있다는 피드백을 받았다. 수정 전의 메소드는 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;
}
포괄적인 의미를 가지는 메소드 add
를 sum
으로 바꾸어 주어진 모든 값들의 합을 반환
한다는 의미를 명시적으로 나타내었다.
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;
}