Activities/우아한 테크 프리코스

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

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

우아한 테크 코스에 지원하게 됐습니다. 회고록인 만큼 그냥 편하게 쓰겠습니다.

혼자 힘으로 2일간 짜낸 코드이긴 한데 이 정도밖에 안됩니다.

일단 바보 같은 코드 좀 보시죠,,

package baseball;

import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
import java.util.ArrayList;
import java.util.List;

public class Application {
    private static final int BALL = 0;
    private static final int STRIKE = 1;
    private static final int BASEBALL_NUM_SIZE = 3;
    private static List<Integer> COMPUTER_NUM = new ArrayList<>();

    public static void main(String[] args) {
        gameStart();
    }

    private static void gameStart() {

        makeComputerNum();
        playingGame();

        if (checkRestartGame())
            gameStart();
    }

    /**
     * 컴퓨터의 3자리 숫자를 만드는 메소드
     */
    private static void makeComputerNum() {
        COMPUTER_NUM.clear();
        while (COMPUTER_NUM.size() < BASEBALL_NUM_SIZE) {
            int num = Randoms.pickNumberInRange(1, 9);
            if (!COMPUTER_NUM.contains(num)) {
                COMPUTER_NUM.add(num);
            }
        }
    }

    /**
     * 게임을 실제로 플레이하는 구간 숫자를 계속 추측함.
     */
    private static void playingGame() {
        String gameString = "";
        System.out.println("숫자 야구 게임을 시작합니다.");
        while (!gameString.equals("3스트라이크")) {
            System.out.println("숫자를 입력해주세요 : ");
            String userInput = Console.readLine();

            isValidLength(userInput);

            gameString = printBallCount(checkBallCount(userInput));
            System.out.println(gameString);
        }
    }

    /**
     * ballCount와 StrikeCount를 체크해서 List형태로 반환해준다.
     */
    private static List<Integer> checkBallCount(String userInput) {
        List<Integer> listBS = new ArrayList<>();
        int totalCount = 0;
        int strikeCount = 0;
        int ballCount = 0;

        for (int i = 0; i < BASEBALL_NUM_SIZE; i++) {
            if (userInput.contains(COMPUTER_NUM.get(i).toString())) {
                totalCount++;
            }
            if (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) {
                strikeCount++;
            }
        }
        ballCount = totalCount - strikeCount;
        listBS.add(ballCount);
        listBS.add(strikeCount);
        return listBS;
    }

    /**
     * BALL Count 와 STRIKE Count를 문자열로 변환하여 출력하여줌
     */
    private static String printBallCount(List<Integer> listBS) {
        String returnString = "";
        if (listBS.get(BALL) != 0)
            returnString = listBS.get(BALL) + "볼 ";
        if (listBS.get(STRIKE) != 0)
            returnString += listBS.get(STRIKE) + "스트라이크";
        if (listBS.get(BALL) == 0 && listBS.get(STRIKE) == 0)
            returnString = "낫싱";
        return returnString;
    }

    /**
     * 게임이 끝난 후 사용자에게 다시 시작할 것인지 물어보는 메소드
     */
    public static boolean checkRestartGame() {
        System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
        System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");

        String gameChoiceNum = Console.readLine();

        if (gameChoiceNum.equals("1"))
            return true;
        else if (gameChoiceNum.equals("2"))
            return false;
        //else를 사용하지않고 잘못 입력시 예외처리 하기
        throw new IllegalArgumentException("1과 2중에 입력하셔야 합니다. ");
    }

    /**
     * 입력한 수의 길이가 일치하는지 판별해주는 메소드
     */
    public static void isValidLength(String inputNum){
        if(inputNum.length() != BASEBALL_NUM_SIZE)
            throw new IllegalArgumentException("입력 자릿 수 오류");
    }

}

1~2일 차동안 작성한 코드입니다. 코드 컨벤션도 모르고 git 커밋 작성 규칙도 제대로 처음 알게 되면서 컴퓨터 공학과 4년간 뭐 했나 싶을 정도로 기본기가 없다는 걸 알아버렸습니다. SpringBoot 써서 홈페이지나 깨작한걸로는 턱없이 부족하다는 걸 알게 됐네요. System.out.println 저건 왜 이리 더러워 보이는지 빨리 어떻게든 깔끔하게 만들고 싶네요.

 

특히 (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) 이 부분 너무 난잡해 보여서 어떻게 바꿀까 고민 중이네요,,

 

MVC패턴, TDD, DDD, OOP 디스코드에서 많이 말하는데 웹 이외에도 MVC패턴을 적용할 수 있는지 처음 알게 돼서 나는 진짜 아는 게 없구나~ 생각하게 됐습니다. 일단 TestCase는 다 돌아가기에 페이지 분리를 해보면서 성장과정을 매일 포스팅하겠습니다! 

 

화이또~

 

+추가

아 그리고 코드컨벤션을 다시보니까 static import를 사용하지말라? 되어있는데 이말인 즉슨 모두 모듈화를 해야한다고 생각이되네요 코드 다시짜기 가보자구~


(이 포스팅은 1주 차 과제가 끝난 뒤에 업로드되도록 설정되어 있습니다.)
작성일 : 23.10.21 / 02:23