개인적으로 3주차에서 작성했던 나의 코드가 가장 불만족스럽게 느껴진 코드였다.
역할과 기능 분리에 있어서 많이 스스로 의구심도 들고, 내스스로 확신또한 가지지 못하고 진행했던 것 같다.
예외 처리를 하는 데에 있어 테스트 코드를 통과하지를 못해서 반나절 넘게 시간을 소비하기도 했다.
또한 내가 작성한 것이 과연 도메인에 속하는게 맞을까? 라는 생각또한 들었다.
여러모로 자괴감도 들고, 정말 부족하게 많다고 생각이 드는 주차였다.
어쨌든 이미 제출은 했고, 새로운 주차가 시작 되었으니, 메일로 받은 공통 피드백을 바탕으로 다음 주차 미션에 어떻게 적용할지 생각해보자.
내가 4주차 미션에서 가장 해내고 싶은 것은 두가지이다.
메세지를 던지도록 구조를 바꿔 데이터를 가지는 객체가 일하도록 한다.
나의 Lotto 코드를 보면
public class Lotto {
private final List<Integer> numbers;
public Lotto(List<Integer> numbers) {
validateLottoNumbers(numbers);
this.numbers = numbers;
}
public List<Integer> getNumbers() {
return numbers;
}
...
}
피드백의 내용처럼 나는 getNumbers()
를 가지고 있었고, 이 메소드를 통해서 LottoService
에서 numbers 를 받아서 출력을 위해서 사용하고 있었다.
...
public String showLottos() {
List<Lotto> lottos = customer.showLottos();
StringBuilder sb = new StringBuilder();
lottos.forEach(lotto -> sb.append(lotto.getNumbers() + "\n"));
return sb.toString();
}
...
}
이러한 메소드를 Lotto 의 도메인 메서드로 포함시켰어야 했나 생각이 든다. 그랬다면 불필요한 get 메소드는 작성되지 않아도 되지 않았을까 생각이 들었다.
테스트 코드 작성은 항상 어려운 것 같다.
그동안 테스트 코드를 작성하면서 모두 비슷한 코드로만 돌려서 사용했다. 피드백에서 테스트 코드도 코드이므로, 리팩터링을 통해 개선해야 한다는 것을 말해주는 것을 봤을 때, 놀라울 정도로 나는 테스트 코드를 버려두고 있었던 것 같아 아쉬움이 들었다.
더욱 더 객체지향스럽게 코드 작성하기. 테스트 코드 완벽하게 짜보기
이 두 가지를 이번 미션에서 완벽하게 수행해봐야겠다 !