Claire's Study Note

[TDD, 클린 코드 with Java] 자동차 경주 미션 피드백 : 예외 처리, 매직넘버 치환

by Hi.Claire
반응형

🐣 TDD, 클린 코드 with Java 19기 (박재성, 넥스트스텝)

 

자동차 경주 미션 피드백 : 예외 처리, 매직넘버 치환

자동차 경주 미션 2단계 피드백 반영

자동차 경주 미션 2단계 코드 리뷰

https://github.com/next-step/java-racingcar/pull/5711

 

2단계 문자열 덧셈 계산기 구현 by coongya · Pull Request #5711 · next-step/java-racingcar

안녕하세요. 2단계 리뷰 요청드립니다. 이번에는 다행히 테스트코드가 주어졌었는데 만약 혼자 테스트케이스부터 작성하고 구현하는 방식이었다면 너무 어려웠을 것 같다는 생각이 들었습니다

github.com

 

1. 예외 처리

Integer.parseInt()는 명시적으로 예외를 던지는 메서드이다.

사용 중에 늘 예외가 발생할 수 있기 때문에 이 부분에 대한 추가 처리가 있으면 좋을 것 같다는 피드백을 주셨다.

나는 기능 요구사항에 있는 음수에 대한 예외 처리만 했었기 때문에 이번 피드백을 반영하여 NumberFormatException이 발생할 경우에 대한 처리도 추가해보았다.

 

StringAddCalculator.java

private static void throwIfInvalidInput(String input) {
    int number = 0;
    try {
        number = Integer.parseInt(input);
    } catch (NumberFormatException e) {
        System.out.println("0 이상 2,147,483,647 이하의 숫자만 입력 가능합니다.");
    }

    if (number < 0) {
        throw new IllegalArgumentException("음수는 허용하지 않습니다.");
    }
}

 

학습 테스트 수행

NumberFormatException이 발생 가능한 경우

  1. 숫자 외의 문자가 들어온 경우 -> (o)
  2. int형의 범위를 초과한 경우 -> (o) 단, 기능 요구사항에 따라 음수가 들어온 경우에는 무조건 RuntimeException을 던지므로 양수일 때의 범위만 체크하면 됨
  3. null 또는 빈 값이 들어온 경우 -> 기능요구사항에 따라 0을 반환하고 있음

 

StudyTest.java

@Test
public void splitAndSum_throws_Exception_if_negative_input() throws Exception {
    assertThatThrownBy(() -> splitAndSum("-1,2,3")).isInstanceOf(RuntimeException.class);
}

@Test
public void splitAndSum_throws_NumberFormatException_if_non_numeric_input() throws Exception {
    assertThatThrownBy(() -> splitAndSum("t,2,3")).isInstanceOf(NumberFormatException.class);
}

@Test
public void splitAndSum_throws_NumberFormatException_if_input_exceeds_limit() throws Exception {
    assertThatThrownBy(() -> splitAndSum("2147483648")).isInstanceOf(NumberFormatException.class);
}

 

2. 매직 넘버 치환

매직 넘버를 정적 상수로 치환하라는 피드백을 주셨다.

매직 넘버는 읽기 쉬운, 혹은 요구사항에 대한 명확한 힌트를 주는 이름으로 선언하는 것이 좋다.

관련해서 아래 링크를 참고하라고 알려주셨다.

 

(참고) 자바 매직 넘버 치환

https://hoonmaro.tistory.com/44

 

자바 리팩토링(Java Refactoring) - 매직 넘버 치환

매직 넘버 치환 소스 코드에 특정한 숫자(매직 넘버(magic number))를 직접 작성하는 것은 나쁜 코딩 스타일 나쁜 예 public class MagicNumber { public static void main(String[] args) { MagicNumber magicNumber = new MagicNumb

hoonmaro.tistory.com

 

StringAddCalculator.java

private static final String DELIMITER = "[,:]";
private static final String CUSTOM_DELIMITER = "//(.)\n(.*)";

 

반응형

블로그의 정보

Claire's Study Note

Hi.Claire

활동하기