개요
3주 차 미션에서는 코드 리뷰를 통해 많은 것을 배웠다.
먼저, 코드 리뷰를 할 때 본인의 말이 정답이 아닌 개인적인 생각 또는 배운 것들이고, 다른 의견이 있다면 궁금하다는 식의 분위기였던 것이 가장 좋았다. 또한 내 생각을 글로 옮기면서, 왜 그렇게 생각하게 되었는지도 고민해 볼 수 있었다.
구현
위 다이어그램은 Intellij에서 제공하는 각 클래스의 의존성을 보여주는 다이어그램이다.
역할
주요 객체에 대한 역할은 아래와 같다.
Controller
LottoController
전체적인 게임의 진행을 담당한다.
- 유저에게 보여줄 메세지를 출력하거나 입력을 받을 때는 View에게 요청
- 게임 진행에 필요한 작업은 Service에게 요청
View
입출력을 담당한다.
- InputView는 입력을, OutputView는 출력을 담당한다.
Service
LottoService
FinanceManager와 GameManager에게 게임 진행에 필요한 명령을 하달하는 역할을 담당한다.
Model
FinanceManager
수입에 관한 역할을 담당한다.
- 유저가 입력한 금액을 이용해 결과를 통해 수입을 계산
GameManager
사용자 로또 생성, 필요 개수만큼 로또 생성 등 로또에 관련된 기능과 게임 결과를 계산하는 역할을 담당
- 필요한 개수만큼 로또를 자동 생성
- 결과를 계산
LottoValidator
사용자의 입력에 대한 유효성 검사 역할을 담당
Lotto
보너스 번호를 제외한 로또 역할 담당
- 특정 숫자를 포함하는지 판단
- 다른 Lotto 객체와 같은 숫자가 몇 개인지 계산
LottoCompareResult
로또를 비교한 결과를 계산하는 역할 담당
- 일치하는 개수 계산
- 보너스 볼이 일치하는지 계산
LottoRank
일치한 개수 별 보너스 볼 고려 여부와 상금을 매핑한 enum 객체
LottoWithBonus
Lotto와 bonusNumber를 함께 가지는 로또
- 로또와 보너스 볼을 비교한 결과를 계산
- 보너스 볼이 같은지 계산
LottoTotalResult
여러 로또 중 각 LottoRank를 만족하는 로또의 개수를 계산
- 위 LottoCompareResult를 반영
- 총상금을 계산
배운 점
아래는 3주 차가 끝나고 고민했던 기록이다.
아쉬웠던 점
아쉬웠던 점은 Service 객체를 만든 것이다. 또다시 레이어드 아키텍처와 MVC 패턴을 혼동한 것 같다.
현재 Service 객체는 두 Manager 객체를 하위에 둔 도메인 객체로 봐도 무방하다.
Service 객체를 생성해 레이어드 아키텍처가 되면
Controller가 도메인 객체에 관여하고, 게임 진행 관련 비즈니스 로직을 처리하는 현재의 흐름이 어색해진다.
결과적으로 이도 저도 아닌 구조가 되어버린 것 같아서 아쉽다.
코드
'회고' 카테고리의 다른 글
뒤늦은 방학 회고 (1) | 2024.04.10 |
---|---|
우아한테크코스 2주차 프리코스 회고록(레이싱 게임) (1) | 2023.11.29 |
우아한테크코스 1주차 프리코스 회고록(숫자 야구) (0) | 2023.11.27 |