본문 바로가기

회고

우아한테크코스 3주차 프리코스 회고록(로또 게임)

728x90

개요

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주 차가 끝나고 고민했던 기록이다.

 

[JAVA] 상속과 조합

상속과 조합 어떻게 다를까? 상속 상속은 말 그대로 A라는 클래스가 부모가 되어 모든 역할과 구현을 B라는 클래스에게 노출하는 것이다. 따라서 B는 A와 강하게 결합된다. 상속은 반드시 is-A관계

choi-records.tistory.com

 

아쉬웠던 점

아쉬웠던 점은 Service 객체를 만든 것이다. 또다시 레이어드 아키텍처와 MVC 패턴을 혼동한 것 같다. 

현재 Service 객체는 두 Manager 객체를 하위에 둔 도메인 객체로 봐도 무방하다.

 

Service 객체를 생성해 레이어드 아키텍처가 되면

Controller가 도메인 객체에 관여하고, 게임 진행 관련 비즈니스 로직을 처리하는 현재의 흐름이 어색해진다.

결과적으로 이도 저도 아닌 구조가 되어버린 것 같아서 아쉽다.

코드

 

GitHub - ChoiWonYu/java-lotto-6

Contribute to ChoiWonYu/java-lotto-6 development by creating an account on GitHub.

github.com

 

728x90