[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이 발생 가능한 경우
- 숫자 외의 문자가 들어온 경우 -> (o)
- int형의 범위를 초과한 경우 -> (o) 단, 기능 요구사항에 따라 음수가 들어온 경우에는 무조건 RuntimeException을 던지므로 양수일 때의 범위만 체크하면 됨
- 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(.*)";
'☕️ Java > TDD, 클린 코드 with Java' 카테고리의 다른 글
[TDD, 클린 코드 with Java] TDD 연습, Test Fixture, 생성자 활용, Getter를 쓰지 말고 객체에게 메시지를 보내라, 테스트 가능한 구조로 개선 (1) | 2024.10.22 |
---|---|
[TDD, 클린 코드 with Java] 자동차 경주 미션 피드백 : 테스트 코드 작성, 전략패턴, 일급컬렉션 (0) | 2024.10.06 |
[TDD, 클린 코드 with Java] 미션과 상관없는 이야기 (2) | 2024.10.01 |
[TDD, 클린 코드 with Java] 과정 소개, 학습 테스트 구현, 메서드 분리 (3) | 2024.09.26 |
[TDD, 클린 코드 with Java] 개발 환경 세팅, AssertJ, JUnit5 가이드 (0) | 2024.09.26 |
블로그의 정보
Claire's Study Note
Hi.Claire