https://github.com/nbalance97/java-lotto/tree/step2

 

GitHub - nbalance97/java-lotto: 로또 미션 진행을 위한 저장소

로또 미션 진행을 위한 저장소. Contribute to nbalance97/java-lotto development by creating an account on GitHub.

github.com


개요


이번 로또 미션에서는 기존 로또 미션에서는 자동으로 생성하는 기능만 있었다면, 수동으로 입력받는 기능도 더하라는 요구사항이 추가되었다😥 기존까지는 요구사항에 맞추어서 끝내면 그대로 끝난 경험이 많다. 그런데 이번에는 요구사항이 추가되면서 기존 코드를 기반으로 새로운 기능을 추가해야만 했다.

 

이전에는 이러한 경험이 없다 보니 코딩을 하면서도 이게 맞나? 싶기도 하더라.. 여차저차 요구사항에 맞추어서 기존 코드를 수정하고, 새로운 코드를 작성하면서 기능 구현을 끝마치기는 했지만, 스스로 코딩을 하면서도 기존 코드를 너무 많이 건드는 거 같아 좀 아닌것 같다고 느껴졌다. 물론 리뷰어 루피도 이를 피드백으로 남겨주셨다..ㅎㅎ

 

매서운 피드백..

 


인터페이스의 도입


사실 처음에는 Lotto를 인터페이스화 해서 AutoLotto와 PassiveLotto로 나누는 것은 어떨까? 하고 직접 진행을 해 보았다. 하지만 각각의 로또의 메소드가 대부분 일치하다는 점을 발견하고, 디폴트 메소드로 빼기에도 애매해서 많은 고민을 했다.😂 결국 루피에게 DM을 보내 조언을 구해보니, 인터페이스를 너무 크게 잡았다는걸 알게 되었다.

 

로또 자체를 인터페이스화 해서 AutoLotto, PassiveLotto로 구현하지 말고, 로또의 생성 규칙을 인터페이스로 잡는 것이 훨씬 구현하기도 편하고 보기에도 좋더라. 즉, AutoLottoFactory와 PassiveLottoFactory로 나누어서 구현하였다.

 

    private LottoFactory autoLottoFactory;
    private LottoFactory passiveLottoFactory;

    public LottoTicket(int autoLottoCount, List<List<LottoNumber>> passiveLottos, LottoNumberGenerator generatorPolicy) {
        this.autoLottoCount = autoLottoCount;
        this.autoLottoFactory = new AutoLottoFactory(generatorPolicy, autoLottoCount);
        this.passiveLottoFactory = new PassiveLottoFactory(passiveLottos);
        this.lottos = generateLotto();
    }

    private List<Lotto> generateLotto() {
        List<Lotto> lottos = new ArrayList<>();
        lottos.addAll(passiveLottoFactory.create());
        lottos.addAll(autoLottoFactory.create());
        return lottos;
    }

 

결론을 내자면 생성 규칙에 따라 Factory를 만들고, 해당 Factory에서 로또를 생성하는 방식으로 구현을 했다.

이렇게 구현을 하면 추후 이상한 방식(절반은 자동, 절반은 수동..?)으로 로또를 생성하게 되더라도 그거에 맞추어서 Factory를 만들어 준 다음 끼워 맞추어주기만 하면 되기 때문에 변경에 유연한 코드가 된 것 같다. 그리고 이러한 경험을 바탕으로 왜 인터페이스를 사용하는지 다시 알게 되어 엄청 유익한 경험이었다😎

 


결론


 

계속해서 점점 알아야 할 것도 많아지고 좀 힘든것 같긴 하지만 그래도 지금은 꽤 재밌다..ㅎㅎ 잘 모르는 상황에서의 리뷰어분들의 리뷰, 그리고 크루원들과의 대화 속에서 많은 걸 배우고 있고 모두 잘하시는 분들이라 계속해서 배워나가겠다는 마음가짐으로 천천히 공부해보고자 한다. 최근에는 데일리 크루원들과 오프라인에서 모각코를 했었는데, 거기서도 개발 관련 이야기를 하며 아직 배워야 할 점이 많다는걸 알게 되었다.. 아무래도 성장할 일만 남지 않았을까..?😎

+ Recent posts