저의 회고 방식은 5F 입니다.
- Fact -> 사실, 무슨 일이 있었나요 ?
- Felling -> 느낀점, 어떤 느낌이 들었나요 ?
- Finding -> 배운 점, 어떤 인사이트를 얻었나요 ?
- Future action -> 향후 행동, 앞으로 무엇을 해야 할까요 ?
- Feedback -> 피드백, 앞서 정한 향후 행동을 실천해본 뒤, 이에 대해 어떤 피드백을 받았나요?
<2주 차 회고>
2023.11.01 - [우아한테크코스 프리코스 회고] - [우아한테크코스 웹 백엔드 6기 회고] - 프리코스 2주 차
사실, 무슨 일이 있었나요?
저번 주차들과는 다르게 기능 구현에 있어서 가장 애먹었지만 테스트 케이스를 통과하는 것에는 성공했습니다..!
느낀점, 어떤 느낌이 들었나요?
3주 차는 미션 - [로또]에 관한 주제로, 로또를 출력하는 형태부터, 기능 요구사항에 적혀있지 않은 학생 스스로 요구사항을 찾아야 하는 부분이 많이 어려웠던 것 같습니다.
그리고 저번 주차 때 목표로 삼았던 Given, When, Then 패턴에 대하여 공부하고, 적용할 수 있었습니다.
이 패턴은 테스트를 준비(Given), 실행(When), 그리고 결과 확인(Then)의 세 단계로 나누어 테스트를 작성하고 이해하는 데 도움을 주었습니다.
이 패턴을 적용하니 테스트 코드의 목적과 구조가 더욱 명확해지고, 테스트 코드를 통해 프로그램의 동작을 이해하는 데에도 큰 도움이 되었습니다
배운 점, 어떤 인사이트를 얻었나요?
1, 2주 차 때는 메인 클래스에서 제가 작성한 로직 코드가 잘 동작하는지 일일이 실행해가며 확인했다면, 이번 미션에서는 로직 구현 코드에 대하여 테스트 케이스를 작성하며 진행했더니, 훨씬 시간도 절약되면서 테스트 코드의 중요성을 알게 되었습니다.
하지만 공통 피드백 부분을 보면서 와닿는 문구가 있었습니다.
테스트를 위한 코드는 구현 코드에서 분리되어야 한다
요구사항에 따라서 구현 코드에서 저는 로또를 생성함과 동시에 랜덤 한 숫자로 이루어진 로또 객체를 만드는 형식으로 진행했습니다. 따라서 로또에 관한 테스트 코드를 작성할 때, 제가 넣는 값으로 로또를 만들기 위해서 로또 생성자를 추가해 주었습니다.
결국 저는 테스트를 위해 구현 코드를 건드린 것이 되었고, 어떻게 해결해야 할까? 고민했는데 간단히 로직을 분리해 주면 되었습니다.
public class Lotto {
private final List<Integer> numbers;
public Lotto() {
this.numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6);
}
}
원래는 위처럼 Lotto를 생성과 동시에 랜덤한 숫자 6개를 발행해 주는 코드로 작성했습니다.
하지만 위처럼 작성하면 테스트 코드에서 로또에 원하는 값을 넣어주기 어렵기 때문에 테스트하기 어려운 코드입니다.
따라서 저는 "랜덤숫자생성기 RandomNumberGenerator" 라는 클래스를 만들어서 분리해 주었습니다.
public class Lotto {
private final List<Integer> numbers;
public Lotto(List<Integer> numbers) {
this.numbers = numbers;
}
}
위와 같이 로또의 매개변수의 List 형태의 숫자로 만들어 주고,
public class RandomNumberGenerator {
// 금액 / 1000 만큼의 로또를 생성한다.
public static List<Lotto> generateLottos(String input) {
return IntStream.range(0, lottoCount(input))
.mapToObj(i -> new Lotto(NumberGenerator.generateRandomNumbers()))
.collect(Collectors.toList());
}
}
이렇게 클래스를 분리하여 다른 로직 클래스에서 로또 안에 generateLottos를 넣어준다면, 각 객체의 역할은 뚜렷해지며 테스트 코드를 작성하기도 쉬운 코드가 될 것입니다.
향후 행동, 앞으로 무엇을 해야 할까요 ?
이제 마지막 미션만 남았습니다. 3주 차 까지 진행하면서, 많은 것을 배웠고 마지막 미션까지 꼭 통과하고 싶다는 욕심이 생기게 되었습니다.
기말고사도 다가오지만, 저의 우선순위를 마지막 미션을 1순위로 두어서 제 영혼을 갈아 해볼 계획입니다.
'우아한테크코스 프리코스 회고' 카테고리의 다른 글
[우아한테크코스 웹 백엔드 6기 회고] - 프리코스 4주 차 (0) | 2023.11.15 |
---|---|
[우아한테크코스 웹 백엔드 6기 회고] - 프리코스 2주 차 (0) | 2023.11.01 |
[우아한테크코스 웹 백엔드 6기 회고] - 프리코스 1주 차 (0) | 2023.10.24 |