3주차 시작이다. 3주차 미션은 로또 미션
이었다. 이것도 전략패턴
공부를 위해서 한 번 해봤던 미션이었다. 다만 현생에 쫓겨 급하게 하느라 제대로 하지 못하고 아쉬움이 많이 남아있었는데 미션으로 나와서 제대로 해보기로 했다!!
설계를 하기 전에 코드리뷰를 하며 피드백을 받아 적용할 점을 생각해봤다.
private
생성자를 통한 인스턴스 생성 방지private
생성자를 public
함수로 사용이렇게 생각해봤는데 지금와서 보니 전부 적용하지는 못한것 같다.
구입금액을 입력해 주세요.
8000
8개를 구매했습니다.
[8, 21, 23, 41, 42, 43]
[3, 5, 11, 16, 32, 38]
[7, 11, 16, 35, 36, 44]
[1, 8, 11, 31, 41, 42]
[13, 14, 16, 38, 42, 45]
[7, 11, 30, 40, 42, 43]
[2, 13, 22, 32, 38, 45]
[1, 3, 5, 14, 22, 45]
당첨 번호를 입력해 주세요.
1,2,3,4,5,6
보너스 번호를 입력해 주세요.
7
당첨 통계
---
3개 일치 (5,000원) - 1개
4개 일치 (50,000원) - 0개
5개 일치 (1,500,000원) - 0개
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
6개 일치 (2,000,000,000원) - 0개
총 수익률은 62.5%입니다.
이번 미션의 실행 결과는 이렇게 나온다.
이제는 익숙해진 설계부터 시작했다.
로직이 어떻게 돌아가는지 생각해보고 거기서 필요한 작업이 뭔지 생각해 봤다.
이전에 코드를 짜보면서 Model 부분에서 클래스 구분을 어떻게 해야하는지에 대해 어려움을 겪었었다. 그래서 이번에는 클래스의 역할들을 더 쪼개서 해보기로 했다.
기능목록부터 작성해줬다. 처음에는 기능목록 작성이 귀찮았는데 하다보니 이렇게 하면 구현해야 할 기능들을 확실하게 파악할 수 있고, 빼먹는 부분이 적어져서 좋은 것 같다.
근데 이번 미션때 예외 발생시 재입력
에 대한 요구사항을 못봐서 나중에 가서 고생했다. 좀 더 꼼꼼하게 봐야겠다.
아무튼 구현은 아래의 순서대로 진행했다.
열거형 정의부터 하고 Input
클래스부터 만들어줬다. 만들면서 Input
클래스에서는 입력값만 받아오는게 좋을 지 아니면 관련 로직을 추가해도 좋을지에 대해 고민했다.
이번 미션을 예로 들면 당첨 숫자
를 입력으로 받아오는데 이를 Input
클래스에서 split
해서 반환해줄지 아니면 입력 받은 그대로 Model
쪽에 전달해줄지 같은것이다.
고민을 하다가 받아온 값을 split
해서 Model
로 전달해줬는데 다음에는 이런 로직을 값을 가지는 클래스에서 해보는 것도 좋을 것 같다.
전체 클래스의 관계도이다.
인텔리제이에 이런 기능이 있는걸 처음 알았는데 관계를 한 번에 보여줘서 좋은 것 같다. 관계도를 보면 Controller
에서 Model
에 관한 것들을 관리하는 것을 볼 수 있다.
Input
과 Output
을 private
생성자를 사용해서 인스턴스 사용을 하지 않고 바로 메서드를 사용해서 의존관계가 나타나지는 않는 것 같다.
3주차 미션을 진행하면서 아쉬웠던 점은 단위 테스트
를 제대로 하지 못했다는 점이다. 로직을 짜고 Model
들의 관계를 생각하느라 단위 테스트
에 관한 것을 생각하지 못했다.
그리고 요구사항을 제대로 파악하지 못해 예외 상황 발생시 재입력
에 대한 부분을 제대로 구현해내지 못하고 테스트만 통과하도록 한 부분도 아쉽다.
Input
을 Model
부분에 넣어줘서 하는 방법을 생각해봤었는데 그렇게 하면 Model
과 View
사이에 의존관계가 생겨서 포기했다.
4주차 미션에도 재입력에 관한 부분이 나오는데 이 부분은 Controller
에서 try-catch
를 통한 메서드를 만들어서 구현해주었다. 그 방법은 4주차 회고에서 소개해야겠다.
3주차 미션
https://github.com/woowacourse-precourse/java-lotto-6/pull/1345