https://github.com/woowacourse-precourse/java-racingcar-7/pull/422
[자동차 경주] 최인호 미션 제출합니다 by inhooo00 · Pull Request #422 · woowacourse-precourse/java-racingcar-7
java-racingcar-precourse 구현할 기능 목록 입력 자동차 입력 "경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)" 출력 Console.readLine() 활용 진행할 라운드 Console.readLine() 활용 출력 계산
github.com
2주차는 고민할 내용이 많지 않아서 비교적 빠르게 끝낼 수 있었습니다. 거의 하루 정도 걸린 것 같네요.
마치 폭풍 전야 같은 기분이 들어서, 3주차 미션에서는 난이도가 얼마나 높아질지 기대 반, 걱정 반입니다🥸
1주차에서 작성했던 것처럼 나만의 MVC 클린코드 기준을 세우고 시작했습니다. 점차 발전하는 제 기준을 지켜봐 주세요.👀
1. 메서드 이름에 매개변수 관련 최대한 많은 정보가 담기도록 한다.
2. 하나의 메서드는 하나의 기능만 가지도록 구현한다. 기능이 많다면 메서드 분리를 진행한다.
3. 매개변수의 이름에도 의미를 잘 전달할 수 있게 구현한다.
4. 모든 클래스가 단일 책임 원칙을 지키도록 설계한다.
5. 프리코스 컨벤션에 맞춰서 코드를 구현한다.
📍 문제 요구 사항
이번에는 테스트 코드도 작성하라는 요구사항이 있었습니다.
테스트코드의 중요성은 1주차 미션 때 확실히 느껴서 좋은 기회라고 생각했는데요. 솔직히 아직도 어떻게 짜야할지 확실한 감이 안 잡힙니다.
처음에는 클래스별로 모든 테스트를 짜려고 했지만, 짜면 짤수록 의미없는 코드 같아서 model만 test를 진행했습니다.
제가 가장 어려워하는 부분은 모든 경우의 테스트를 생각해야 한다는 점인 것 같습니다.
1주차 미션 때 요구사항에도 다양한 상황을 고려하는 것에 지쳤는데, 테스트코드를 짜면서 똑같이 반복하는 기분이 들었습니다.
이번 2주차 미션에서는 model에서의 모든 예외를 다 처리한 것 같지만, 앞으로 프로젝트 규모가 커지면 얼마나 많은 예외 상황을 테스트로 구현해야 할지 벌써부터 걱정이 됩니다. 그래도 테스트의 중요성을 충분히 느끼고 있기 때문에, 즐겁게 도전해보려 합니다!
📍 Keep
record 사용하기.
이번에 DTO를 사용했는데, 이걸 class가 아니고 record로 구현했습니다. 자동으로 생성자도 생기고 다양한 메서드가 오버라이딩 되어있어서 앞으로 프리코스의 DTO는 record로 구현할 예정입니다.
public record CarNameDto(String name) {
public static CarNameDto of(String name) {
return new CarNameDto(name);
}
}
validator 클래스 구분하기.
1주차 미션 때는 하나의 validator class에 모든 예외를 넣어놨는데, 이번에는 기능별로 validator class를 구분해 보았습니다.
다행히도 바로 적용할 수 있게 2주차 미션은 입력할 때 자동차 이름들과 이동할 횟수를 입력받는 거였어서..!
바로 자동차 이름 validator, 이동할 횟수 validator 두 개로 처리했습니다.
코드 리뷰 계속하기.
제 코드만 보면 우물 안 개구리 같다는 생각이 듭니다. 앞으로도 꾸준히 다른 사람들의 코드를 참고하고, 서로 의견을 주고받으며 함께 성장해 나갑시다~
전에 배웠던 거 바로 적용해보기
이번에 가장 잘했다고 생각이 드는 건데요..!
1주차 때 저희가 구분자를 여러개 만들 수 있다는 요구사항과 함께 계산기 미션을 수행했던 것을 응용해서 바로 적용해 보았습니다.
이렇게 간단하게 enum에 추가하기만 하면 구분자를 여러개로 사용할 수 있게 설계했습니다.
다음 3주차 미션에는 2주차의 어떤 것을 적용해볼 수 있을지 기대가 됩니다!
📍 Problem
테스트 코드를 어디부터 어디까지 구현해야할지 모르겠습니다.
지금 테스트코드는 앞에서 언급했던 것처럼 model 클래스들만 진행하였습니다.
view를 테스트하려고 만들긴 했는데, "이게 의미가 있나?"라는 생각과 함께 진행하지 않았습니다.
더해서 util 클래스 기능도 테스트 코드로 작성하지 않았는데요. 테스트하기도 생각보다 어렵고, 어차피 model에서 테스트해서 통과하면 문제 없지 않나? 라고 생각했습니다.
하지만 다른 사람들 코드를 보니 util을 테스트하신 분들도 계시더라구요..! 다음에는 util도 테스트 용이하게 만들어 보도록 할 예정입니다.
📍 Try
프리코스 3주차에서는
1. 테스트코드 더 깊게 고민해보고 짜보기.
2. 인터페이스 사용할 수 있으면 사용해보기.
📍 배운점
이번에 ErrorMessage 클래스를 만들어서 예외 처리 메세지를 관리해 보았습니다.
public enum ErrorMessage {
INPUT_STRING_DUPLICATE("입력 값이 중복되었습니다."),
INPUT_STRING_NOT_NULL("입력 값이 null이 될 수 없습니다."),
INPUT_CAR_NAME_IS_INCORRECT("입력한 차 이름이 올바르지 않습니다."),
INPUT_CAR_NAME_BLANK("차 이름은 공백이 될 수 없습니다."),
INPUT_WRONG_ROUND_NUMBER("입력한 라운드 수가 올바르지 않습니다."),
EXCEPTION_NUMBER_RANGE("1회 이상 이동해야 합니다."),
EXCEPTION_NUMERIC("자연수만 입력 가능합니다."),
EXCEPTION_INT_RANGE("int 범위를 초과하는 입력은 불가능합니다.");
public final String message;
ErrorMessage(String message) {
this.message = message;
}
}
이렇게 관리해서 처음에는 뿌듯했는데, 계속 보니까 조금 의미가 없지 않을까 생각이 듭니다.
저는 에러 메세지는 다룰 때 상수로 묶어서 관리함의 이점은 재사용성이라고 생각합니다.
근데 끝나고 돌아보니 레이싱카 서비스에서는 ErrorMessage를 재사용한 코드가 없었습니다..
오히려 이를 상수로 묶어서 코드를 볼 때 직관적으로 보이지 않기도 했습니다. (제 한국인이라서 그런 거 같습니다😇)
무작정 새로운 방법으로 접근하기보다는, 프로젝트의 특성과 필요성을 충분히 고려한 후 적용하는 것이 중요하다는 생각이 들었습니다.
📍 마무리
벌써 반이나 끝냈군요..! 다들 바쁘실텐데 마지막까지 체력관리 잘하시길 응원하겠습니다.🙏
'우테코 7기 프리코스' 카테고리의 다른 글
우아한 테크코스 7기 프리코스 4주차 회고 (0) | 2024.11.23 |
---|---|
우아한 테크코스 7기 프리코스 3주차 회고 (0) | 2024.11.04 |
우아한 테크코스 7기 프리코스 1주차 회고 (0) | 2024.10.25 |