우아한테크코스 프리코스 3주차 회고!!!

허준기·2023년 11월 18일
0

우테코

목록 보기
3/7
post-custom-banner

3주차 시작이다. 3주차 미션은 로또 미션이었다. 이것도 전략패턴 공부를 위해서 한 번 해봤던 미션이었다. 다만 현생에 쫓겨 급하게 하느라 제대로 하지 못하고 아쉬움이 많이 남아있었는데 미션으로 나와서 제대로 해보기로 했다!!

설계를 하기 전에 코드리뷰를 하며 피드백을 받아 적용할 점을 생각해봤다.

적용할 점

  • ENUM 적용
  • 매직넘버 변수화
  • Input, Output → private생성자를 통한 인스턴스 생성 방지
  • else 사용 금지
  • 생성자 주입 방법 사용해보기 → 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에 관한 것들을 관리하는 것을 볼 수 있다.

InputOutputprivate 생성자를 사용해서 인스턴스 사용을 하지 않고 바로 메서드를 사용해서 의존관계가 나타나지는 않는 것 같다.

제출 후

3주차 미션을 진행하면서 아쉬웠던 점은 단위 테스트를 제대로 하지 못했다는 점이다. 로직을 짜고 Model들의 관계를 생각하느라 단위 테스트에 관한 것을 생각하지 못했다.

그리고 요구사항을 제대로 파악하지 못해 예외 상황 발생시 재입력에 대한 부분을 제대로 구현해내지 못하고 테스트만 통과하도록 한 부분도 아쉽다.

InputModel부분에 넣어줘서 하는 방법을 생각해봤었는데 그렇게 하면 ModelView 사이에 의존관계가 생겨서 포기했다.

4주차 미션에도 재입력에 관한 부분이 나오는데 이 부분은 Controller에서 try-catch를 통한 메서드를 만들어서 구현해주었다. 그 방법은 4주차 회고에서 소개해야겠다.

3주차 미션
https://github.com/woowacourse-precourse/java-lotto-6/pull/1345

profile
나는 허준기
post-custom-banner

0개의 댓글