Activities/우아한 테크 프리코스

[회고록] 우아한테크 프리코스 회고록1-3

발달중인 망고 2023. 10. 26. 00:03

작성시각 10월 25일 오전 03:04 (이 포스팅은 1주 차 과제가 끝난 뒤에 자동 업로드됩니다.)

 

공부가 더 절실히 필요하다는 것을 느꼈습니다...

일단 가장 중요한 거 기능목록표인가 그것을 작성하는 것의 중요성을 뼈저리게 느꼈습니다. Model 구현에 있어서 필요한 기능이 정리가 안 되니까. "어? 이거 필요하네 만들어야지" while(true)돼서 Model 만 한 6개 만들었다 지웠다 삽질을 많이 했는데 시간이 없어서 그냥 빨리빨리 배우면서 하려다 보니까 급했는데 다음에는 첫날에 코딩금지를 내리고 기능목록과 플로우차트 작성에 1일을 쏟아도 되겠다고 생각했습니다. 진짜 개발시간 3분의 1로 줄여주는 방법인 거 같네요.. 이거 쓰고 Constant 페이지 만들어서 상수들좀 정리 좀 하고 1차 제출하렵니다.

 

코드ㄱㄱ


Controller

더보기
package baseball.Controller;

import baseball.Model.BaseBallGame;
import baseball.Model.GameState;
import baseball.Model.Helper;
import baseball.Model.Valid;
import baseball.View.GameView;
import java.util.List;

public class GameController {
    private GameView gameView = new GameView();
    private GameState gameState;

    public void startGame() {
        Helper helper = new Helper();
        gameState = GameState.GAME_START;

        gameView.printStartMessage();

        while (gameState != GameState.GAME_END) {
            BaseBallGame baseBallGame = new BaseBallGame(helper);
            playGame(helper, baseBallGame);
            String inputRestart = gameView.printGameOverMessage();
            gameState = GameState.gameRestart(Valid.restartValid(inputRestart));
        }
    }

    public void playGame(Helper helper, BaseBallGame baseBallGame) {
        while (gameState != GameState.GAME_OVER) {
            String input = Valid.startValid(gameView.printInputMessage());
            List<Integer> userInput = helper.parseUserInput(input);
            List<Integer> ballStrikeCount = baseBallGame.checkBallCount(userInput);

            gameView.printBallStrikeMessage(ballStrikeCount);
            gameState = GameState.gameOver(baseBallGame.checkThreeStrike(ballStrikeCount));
        }
    }

}

음 문제점을 보자면 사실 깔끔하게 만들고싶어서 만든 건데 가독성이 있는지 모르겠습니다. 처음 while문은 게임 전체를 관리하고 playGame의 while문은 사용자가 반복입력하면서 하는 건데 지금 보니까 ENUM으로 설정한 OVER와 END가 가독성이 안 좋아 보이네요... 다시 하죠 뭐 다음에 열심히

아쉬운 점

코드컨벤션을 잘 지키지 못했다. 

이건 디스코드에서 본 것 같은데 한 줄에. 1개만 찍는다. 나는걸 봐서 지금 딱 봐도 점 2 개인게 많죠 ㅠ 아쉽네요


Model

더보기
package baseball.Model;

import java.util.ArrayList;
import java.util.List;

public class BaseBallGame {
    private List<Integer> computerNumber;
    private Helper helper;
    private static final int BASEBALL_NUM_SIZE = 3;
    private static final int STRIKE = 1;


    public BaseBallGame(Helper helper) {
        this.helper = helper;
        computerNumber = helper.generatorComputerNumber(BASEBALL_NUM_SIZE);
    }

    public List<Integer> checkBallCount(List<Integer> userInput) {
        List<Integer> listBallStrike = new ArrayList<>();
        int totalCount = 0;
        int strikeCount = 0;

        for (int i = 0; i < BASEBALL_NUM_SIZE; i++) {
            if (userInput.contains(computerNumber.get(i))) {
                totalCount++;
            }
            if (userInput.get(i) == computerNumber.get(i)) {
                strikeCount++;
            }
        }

        listBallStrike.add(totalCount - strikeCount);
        listBallStrike.add(strikeCount);
        return listBallStrike;
    }

    public boolean checkThreeStrike(List<Integer> listBallStrike) {
        if (listBallStrike.get(STRIKE) == BASEBALL_NUM_SIZE) {
            return true;
        }
        return false;
    }
}

가장 아쉬운 부분,, checkBallCount가 너무 더러워 보여서 어떻게 할지 고민이 많았는데 BallCount, Computer, User 이렇게 Model을 만들고 객체에 넣어놓으려고 했는데 앞서 말했던 설계서처럼 구체화를 안 시키고 머리로 하려니까 복잡하고 어렵네요

아쉬운 점

int totalCount = 0; 이것도 마음에 안 들음

listBallStrike.add 에서 직접 연산해서 대입하는 것도 별로임

사실 checkBallCount 메서드가 너무 별로인데 다음에 잘하지 뭐

 

나머지 Model은 GameState(Enum), Helper, Valid 가 있는데 Git가시면 보실 수 있습니다.


마무리하자면 한 2일 정도 집중 못해서 아쉽고, 특히 초기에 docs를 쓰는데 공을 들이고 개발에 들어가자고 생각했습니다. 코드컨벤션을 신경 쓰면서 추가 구현이 필요하다면 갈아엎지 말고 천천히 기능분리를 해가는 게 좋다고 판단되네요. 다 당연한말이지만 당연한걸 당연하게 하는 사람은 잘하는 사람입니다. 파이팅~