🍀

6일차_설계를 코드로 구현하기

작성일자
Oct 24, 2023
태그
DIARY_DEVELOP
프로젝트
PreCourse
책 종류
🚀
이번 주차에 적용한 디자인 패턴, 클린코드 기법
  • MVC
  • TDA
  • SRP (는 많이 고려하진 못했다)

🗂️ Model

Computer

  • attributes
    • secretNumber : 컴퓨터가 생성한 랜덤 숫자
  • methods
    • Computer() : 랜덤으로 생성한 숫자 저장
    • getSecretNumber() : 저장된 숫자 반환

Game

  • attributes
    • status : 현재 게임 상태 (진행 중, 대기, 종료)
  • methods
    • Game() : 게임 상태 진행 중으로 초기화
    • pauseGame() : 게임 상태 대기로 업데이트
    • restartGame() : 게임 상태 진행 중으로 업데이트
    • endGame() : 게임 상태 대기로 업데이트
    • getStatus() : 게임 상태 반환

Round

  • attributes
    • balls : 볼 개수
    • strikes : 스트라이크 개수
  • methods
    • calculateResult() : 볼과 스트라이크로 라운드 결과 반환

👩🏻‍💻 View

InputView

  • methods
    • getSuggestedNumber() : “숫자를 입력해주세요 : “ 입력
    • getGameContinueChoice() : “게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.” 입력

OutputView

  • methods
    • printGameStart() : “숫자 야구 게임을 시작합니다.” 출력
    • printGameEnd() : “3개의 숫자를 모두 맞히셨습니다! 게임 종료” 출력
    • printStrikeAndBallHint() : “[1..3]스트라이크 / [1..3]볼 / [1..3]볼 [1..3] 스트라이크” 출력

📡 Controller

BaseballGameController

  • attributes
    • computer : 컴퓨터 숫자 관리
    • game : 게임 상태 관리
    • round : 각 라운드의 결과(볼과 스트라이크 수) 관리
  • methods (view → model → view)
    • startGame() : 게임 시작
      • (v)printGameStart → (m)startGame, (m)generateSecretNumber, (m)getSecretNumber
    • startRound() : 라운드 진행
      • (v)getSuggestedNumber → (m)updateSuggestedNumber, (m)getSuggestedNumber, (m)calculateBallsAndStrikes → (v)printResult
    • restartOrEndGame() : 게임 재시작하거나 종료
      • (v)getGameContineuChoice → (m)restartGame, (m)generateSecretNumber, (m)getSecretNumber
      • or (v)getGameContineuChoice → (m)endGame

ExceptionHandler

  • methods
    • validateSuggestedNumber() : 플레이어가 제시한 숫자 유효성 검사
    • validateGameStatus() : 플레이어가 제시한 게임 지속 여부 유효성 검사

🔑 Enum

ErrorCode

  • 숫자의 길이가 3이 아닙니다.
  • 중복된 숫자가 있습니다.
  • 1~9 사이의 숫자가 아닙니다.
  • 지속 여부를 표시하는 1~2 사이의 숫자가 아닙니다.

GameStatus

  • 진행 중
  • 대기
  • 종료
 

Today in 프리코스

TIL 작성하기
몰입
코드로 구현하기
🚀
오늘의 각오
  • 삽질하느라 쏟은 시간을 만회하기 위해 이제 남은 하루를 이틀처럼 달리자 ^^
 
🍀
1일차_둘러보기, 환경설정하기
Oct 19, 2023
DIARY_DEVELOP
🍀
2일차_컨벤션 정리하기
Oct 20, 2023
DIARY_DEVELOP
🍀
3일차_설계에 대해 고민하기
Oct 21, 2023
DIARY_DEVELOP
🍀
4,5일차_MVC 온전히 이해하기
Oct 22, 2023
DIARY_DEVELOP
🍀
6일차_설계를 코드로 구현하기
Oct 24, 2023
DIARY_DEVELOP
🍀
7일차_리팩토링과 마무리하기
Oct 25, 2023
DIARY_DEVELOP
🍀
8,9일차_코드 리뷰 통해 객체지향에 다가가기
Oct 27, 2023
DIARY_DEVELOP
🍀
10일차_지난 과제 돌아보며 객체지향 이해하기, 의존성과 설계의 관계 맛보기
Oct 28, 2023
DIARY_DEVELOP
🍀
11일차_객체지향을 미션 설계에 적용하기(with [책] 객체 지향의 사실과 오해)
Oct 29, 2023
DIARY_DEVELOP
🍀
12일차_기능 별로 구현하며 단위 테스트의 필요성 느끼기 (with [책]자바와 JUnit을 활용한 실용주의 단위 테스트)
Oct 30, 2023
DIARY_DEVELOP
🍀
13,14일차_일급 컬렉션과 레코드 적용해 리팩토링하기
Oct 31, 2023
DIARY_DEVELOP
🍀
15, 16일차_코드 리뷰를 통해 성장하기(1)_다른 사람의 코드 읽으면 배운 것 정리
Nov 2, 2023
DIARY_DEVELOP
🍀
17일차_코드 리뷰를 통해 성장하기(2)_내 코드 개선하며 배운 것 정리
Nov 4, 2023
DIARY_DEVELOP
🍀
18일차_내가 찾은 설계 방법 공유하기, 공유에 대해 고민하기
Nov 5, 2023
DIARY_DEVELOP
🍀
19일차_지난 과제 피드백 고려해 설계하기
Nov 6, 2023
DIARY_DEVELOP
🍀
20, 21일차_일단 돌아가는 코드를 만들기
Nov 7, 2023
DIARY_DEVELOP
🍀
22일차_현재 도움이 될 것 생각하기 (디자인패턴과 mvc2 과감히 패스)
Nov 9, 2023
DIARY_DEVELOP
🍀
23일차_코드리뷰하기 (feat. converter 파고들기)
Nov 10, 2023
DIARY_DEVELOP
🍀
24일차_기획을 문서화하기
Nov 11, 2023
DIARY_DEVELOP
🍀
25일차_설계하며 고민하기
Nov 12, 2023
DIARY_DEVELOP
🍀
26, 27일차_구현하며 고민하기
Nov 13, 2023
DIARY_DEVELOP
6일차_설계를 코드로 구현하기