2주 차 미션은 자동차 경주 미션이었습니다.
2주 차 미션을 진행하기 전,
1주 차 피드백과 동기들의 소통을 통해 이번 미션에서 가장 신경 쓴 부분은
일급 컬렉션 사용,
객체지향 설계 원칙을 따르도록 객체에게 책임과 역할을 부여하는 부분입니다.
일급 컬렉션이 무엇인지 궁금하시다면,
제가 정리한 일급 컬렉션을 보고 도움이 되시길 바랍니다!
기능 요구 사항을 복사하여 필요해 보이는 기능 목록 단위를 설정하고
순서대로 도메인과 그에 맞는 역할과 책임을 주는 형식으로 TDD 개발을 진행하였습니다.
이번 미션에서 추가된 요구 사항 중
본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
의 요구사항을 신경 써서 기능 목록을 도메인 기준으로 필요한 기능들을 정리하여 작성하였습니다.
이번 미션에서 지난주와의 코드 개선 및 진행과정,
가장 많이 고민한 부분을 공유하고
동기들과의 리뷰 활동을 통해 느낀 점을 적어보려고 합니다.
지난주와의 코드 개선 및 진행 과정
[ interface를 추가하여 무작위 값의 확장성을 높이자 ]
무작위 숫자 생성에 대해 인터페이스를 구현하여 유지보수 가능한 코드를 작성하도록 하였습니다.
[ 일급 컬렉션과 record를 사용하여 도메인을 분리하자 ]
객체가 변수 생성만을 담당하고 있었지만,
객체와 연관된 행위를 일급 컬렉션으로 분리하여 코드의 응집성이 향상되고 테스트하기 쉬워졌습니다.
또한 객체를 더 가독성 있는 코드로 만들었습니다.
[ service를 없애고 Domain 객체에게 역할을 담당 ]
1주 차 코드에서 객체는 필요 변수 생성만을 담당하게 하였습니다.
그래서 비교하거나 검증을 하기 원 한다면, service를 구성하여 테스트 코드를 작성하였습니다.
이 방식으로 서비스를 구성하여 작성해 나간다면 간단한 애플리케이션은 문제가 없을지 몰라도
요구사항에 계속 추가되었을 때 service 로직의 복잡성이 증가하고 유지보수하기 어려운 코드가 될 것입니다.
그래서 객체에게 역할을 담당하도록 변경하였고, 도메인 객체가 명확해져서 가독성이 더 향상되었습니다.
또한 테스트하기 더 편리해지는 경험을 하였습니다.
가장 많이 고민한 부분
개인적으로 Distance 클래스에서 거리가 증가할 때,
거리의 증가 역할을 담당할 수 있도록 무작위 생성 값을 추가하여 검증하고 싶었지만 (Domain이 담당하도록),
public Distance increase() {
if (randomUtils.generateRandomNumber() > 4) {
return new Distance(location + MOVE_VALUE);
}
//..
}
테스트 코드를 작성하기 어려워져 controller에서 무작위 생성 값을 선언하게 되었습니다.
해당 부분을 동기들과의 리뷰 활동으로 소통하여 유지보수하기 좋은 코드를 작성할 수 있도록 노력해야 할 것 같습니다.
동기들과의 리뷰 활동
- 테스트 코드를 작성하기 어려운 코드는 어떤 구조를 가지고 있고 어떻게 접근해야 할까
클래스를 도입하여 거리 증가 동작을 캡슐화하는 방법을 생각해 보자.
코드 구조를 더 모듈화 하고 단일 책임 원칙을 따르도록 하는 방향을 생각해 보자.
- for문의 조건에 메서드를 포함시키면, 매 반복마다 해당 메소드를 호출하게 된다.
depth를 우선시 생각하는 것도 좋지만, 이러한 경우 불 필요한 메서드 호출을 일으킨다.
for (int i = 0; i < tryCount.getTryCount(); i++) {
- 프로젝트 전체에 일관성 있는 메서드 네이밍 규칙을 적용하자.
현재 불 규칙적인 검증 메서드 명들을
public CarName {
isCarNameLengthValidate(name);
}
public Cars{
isDifferentCarName(cars);
minimumCountOfCars(cars.size());
}
메서드의 일관성과 가독성 향상을 위해 메서드명을 동사로 선언하자.
// 검증 메서드 일관성 유지
public Cars {
validateDifferentCarName(cars);
validateMinimumCountOfCars(cars.size());
}
정리
2주 차 리뷰활동으로 내 코드와 생각을 공유하는 과정을 통해,
빠른 피드백을 받을 수 있었고, 놓쳤던 부분들을 다시 확인할 수 있었습니다.
그리고 주 차 피드백 사항과 세 가지 요구 사항을 만족 하는 것이
피드백 사항을 반영하는 것과도 같다는 생각이 들었고, 이 것을 만족하기 위해 더 노력해야 할 것 같습니다.
제 코드는 아래 링크로 남겨놓겠습니다!
https://github.com/COBI-98/java-racingcar-6
'우아한 테크코스' 카테고리의 다른 글
[우테코] 프리코스 4주차 '크리스마스 프로모션' 미션 회고록 (0) | 2023.11.18 |
---|---|
[우테코] 프리코스 3주차 '로또' 미션 회고록 (0) | 2023.11.12 |
[우테코] 프리코스 1주차 '숫자 야구' 미션 회고록 (2) | 2023.10.30 |
[우테코] 우아한테크코스 지원 [+2024 입학 설명회] (2) | 2023.10.19 |