2018-4-5 TIL TDD기반으로 Lotto 3단계 구현

TDD를 이용한 로또3단계 구현

이전에 HandLotto

public class HandLotto {
    private Lotto lotto;
    public List<Lotto> generateHandLotto(int handbuy, List<Lotto> lottos) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("수동으로 구매할 번호를 입력해 주세요.");
        for(int i = 0; i < handbuy; i++) {
            String str = scanner.nextLine();
            lotto = new lotto.Lotto(str);
            lottos.add(lotto);
        }
        printLottoAll(lottos);
        return lottos;
    }

    public void printLottoAll(List<Lotto> lottos) {
        for(int i = 0; i < lottos.size(); i++)
            System.out.println(lottos.get(i).getLotto());
    }
}
  • HandLotto라는 클래스를 생성을 했고, 거기서 generateHandLotto라는 메소드를 통해서 수동구매한 로또를 리턴하는 방식으로 설계를 했다.

BuyLotto

public List<Lotto> manualBuy(int manualBuy) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("수동으로 구매할 번호를 입력하시오.");
        for(int i = 0; i < manualBuy; i++)
            lottos.add(new Lotto(scanner.nextLine()));
        return lottos;
    }
  • TDD를 통해서 로또 3단계를 구현을 하기 시작을 했다. 로또 3단계에서는 수동구매할 갯수를 정하고 그것의 갯수만큼 로또객체를 생성을 해서 lottos에 넣고 lottos를 리턴하는 방식으로 구현을 했다.
  • 이전에는 HandLotto라는 클래스를 만들고 거기서 generateHandLotto(int handbuy, List<Lotto> lottos)라는 인자를 전달을 받아서 로또를 생성을 했다.
  • 처음에는 테스트코드를 작성할때 이전에 접근을 했던 방식으로 접근을 했었지만, 문득 BuyLotto에서 lottos를 이용을 하는데 굳이 클래스와 메소드를 안만들고 인자도 줄일 수 있도록 BuyLotto에서 manualBuy를 통해 수동구매를 하는 메소드를 함께 만들었다.
  • BuyLotto에서는 생성자를 통해서 자동구매를 진행하고 이것이 List<Lotto> lottos를 반환을 하기때문에 인자에다가 넣지않더라도 lottos를 호출을 할 수 있다.
  • 이것을 이용해서 코드가 한결 깔끔해 질 수 있었다.

오늘의 느낀점

  • 화요일부터 TDD방법론을 이용을 해서 로또프로젝트를 진행을 하고 있다. 오늘까지해서 화,수,목 총 3일동안 진행을 했고 로또프로젝트는 step1, step2, step3까지 진행을 하고 이제 step4를 진행을 할 차례이다. 3일동안 느낀점은 이전에는 아무생각없이 클래스와 메소드를 만들고, 또 인자를 막 전달을 해서 설계를 했었다. 하지만 TDD를 통해서 테스트코드를 먼저 작성을 하다보면 정말 이 기능을 동작시키기위해서 어떤 메소드들이 필요하고 어느클래스에서 메소드를 설계를 할지에 대한 고민을 하기 시작했다. 알게모르게 그 과정에서 메소드에 전달되는 인자를 많이 줄여나가게 되었다.
  • 로또를 step1, step2, step3에 대한 코드리뷰를 받으면서 사실 많이 걱정을 했었다. 내가 이렇게 한다고해서 달라질께 있나 싶었다. 하지만 막상 코드리뷰를 받았을때는 이전과는 많이 짧아지고 달라진 코드리뷰였다. 그리고 일단 피드백이 짧았다. 이전에는 한단계를 진행을 할때마다 3번정도의 피드백을 받고나서 진행을 했다면 TDD를 이용해서 개발을 하고 나서는 1번정도의 코드리뷰만 받고서 다음단계로 넘어가게되었다. 특히 오늘 step3를 만들고 PR를 보냈을때 바로 merge가 되고 나서 소름이 돋았다. 정말 내가 달라져서 merge가 된건지. 아니면 그저께 너무 깨져서 안쓰러워서 merge를 해주신건지에 대한 생각이 들정도 였다. 마치 폭풍전야와 같은 느낌이였다. 알게모르게 불안감과 두려움이 있었기때문이다. 그러다가 포비와의 짧은대화를 통해서 내가 코드설계하는것이 달라졌다는 이야기를 들었다. merge를 할만해서 한번에 merge를 한거라고 이야기를 해주셨을때는 많은 안도가 됬다. 그저께 자신감이 많이 떨어졌었는데, 그덕분에 TDD방법론을 적용을 하고 다시 자신감이 회복이 되고있어서 감사하다 :D
Written on April 5, 2018