[2주차] 숫자 야구 게임 회고

김주형·2022년 11월 9일
0
post-thumbnail

"중심을 잡아라."

모은 돈을 탈탈 털어서 온갖 책들과 온라인 강의를 구매하고 머리를 쥐어뜯으면서 지식을 쑤셔왔던 것보다, 지난 2주동안 요구사항을 부여받고 지식을 실천함으로써 경험한 "미션 기반 학습 과정"이 훨씬 즐거운 마음가짐과 성장에 효과적인 것 같다는 생각을 가지게 되었다.

미션이나 요구사항은 문제에 대한 책임감을 부여해주고, 그 책임감은 문제가 해결되지 않으면 잠에 들고 싶어도 문제에 대해 생각할 수 밖에 없는 몰입을 경험시켜주기 때문이다.

맨먼스 미신과 황농문 교수님의 몰입이라는 책을 읽고 이상적이긴 했지만, 해야 돼서 하는게 아니라 정말 선택적, 능동적으로 몰입을 실천할 수 있는건지 의심했었는데.. 사실이 맞는 것 같다. 의심했던게 죄송해질 정도로 체감한다.

동시에 1주차 미션 이후 뛰어난 사람이 많아도 너~~~무 많다는 사실과 그 사람들과의 격차에 대한 고민을 해소하려 노력하면서 2주차를 보냈다.

우선 다른 사람들의 코드를 읽어보고 동경심을 가지게 되었다.
그러다보니 주눅들기도 하지만 다른 사람의 능력을 봄으로써 배우는 시간을 가지고, 배움을 실천해서 내 것으로 만들 순 없는지 고민했었다.

개인적 욕심으로는 그들의 경험을 모방하는걸 넘어서서 훔쳐가는 것까지 도달해보고 싶었지만 지식들을 실천하면서 미션에 적용하려고 노력하는게 최선이었던 주였던 것 같다.

역시 달리 방법이 없는 것 같다.

절대적으로 많이 시간을 투자해야하고,
그러기 위해선 지치고 힘든 시간을 견디는 것은 좋은 생각이 아니다.

지친 것, 힘든 것, 고독한 것 등등..
"모든 걸 잊을 수 있을 정도로 즐길 수 있는가?"
"어떤 것도 신경 쓰지 않을만큼 즐기는 중인가?"
라는 질문으로 요약되는 것 같고, 이것에 대답하는게 유일한 방법이라고 생각한다.

누구나 하나씩, 아주 열심히, 끈기를 가지고 부단하게 노력하는 것 말고는 정말로 방법이 없다.

프리코스 4주차가 끝난 뒤에 프로그래밍을 지금보다 더 즐길 수 있을지 스스로 대답해보고 싶다.


도구와 친해지기

미션을 진행하면서 IDE나 원격 저장소와 친하지 못해서 겪었던 삽질의 이유를 탐색하고, 해결에 도달한 경험을 기록했었다.
(비공개로 포스팅 후 미션 기간이 지나서 공개로 전환했다.)

클릭하여 이동!


기본이 중요하다.

불변 객체 관리

  • 상수를 따로 분리하면 안 되는걸까? 라는 고민에서 시작되었다.

  • 불변 객체를 왜 쓸까?를 참고해서 값이 변하지 않도록 보장받는 변수들을 따로 상수 클래스로 분리해서 보관했다.

  • 보관

    public class Constant {
    
      public static final String GAME_START = "숫자 야구 게임을 시작합니다.";
      public static final String GAME_OVER = "게임을 재시작하려면 1, 종료하려면 2를 입력해주세요.";
      public static final String GAME_END = "게임 종료";
      public static final int MAX_INDEX = 3;
      public static final String STRIKE = String.format("%d스트라이크", 3);
      public static final String VICTORY = "\n3개의 숫자를 모두 맞히셨습니다! 게임 종료";
    }
    
  • 사용

    for ( int keyIndex = 0; keyIndex < MAX_INDEX; keyIndex++ ) {
            char index = userLine.charAt(keyIndex);
            int valueByKey = getNumericValue(index);
            userRepository.put(keyIndex, valueByKey);
        }
        return userRepository;
    }
private static boolean isRecursion(String readLine) {
        Map<Integer, Integer> user = inputUserNumber(readLine);
        Hint.loopHint(user, computerBoot);

        String result = Print.printResult();
        System.out.println(result);
        boolean recursion = result.equals(STRIKE);

        while ( !recursion ) {

            readLine = Console.readLine();
            user = inputUserNumber(readLine);
            Hint.loopHint(user, computerBoot);
            result = Print.printResult();
            System.out.println(result);
            recursion = result.equals(STRIKE);
            
        }
        
        victory();
        System.out.println(GAME_OVER);
        return recursion;
    }

정규 표현식?

문자를 검사해야 하는 방법을 모색하던 중, 이번 기회에 정규 표현식에 대해 배워보기로 했다. 많이 부족했지만, 항상 어렵고 신비로워 보이던 정규식을 실제로 사용해보는 것만으로도 보람차고 즐거웠다.

  • 예시
private static void patternCheck(String validation) {

        String asterRiskExpression = "^[₩~!@#$%^&*()-+=/.,|]*$";
        String stringExpression = "^[abcdefghijklmnopqrstuvwxyz]*$";

        Pattern compileAsterRisk = Pattern.compile(asterRiskExpression);
        Pattern compileString = Pattern.compile(stringExpression);

        Matcher asterRiskCheck = compileAsterRisk.matcher(validation);
        Matcher stringCheck = compileString.matcher(validation);

        if ( asterRiskCheck.find() || stringCheck.find() ) {
            throw new IllegalArgumentException("서로 다른 수로 이루어진 세자리 수를 입력해주세요.");
        }
    }

의존성 주입

  • 역할을 최대한 작게 쪼개라는 요구사항을 지키기 위해 문제 쪼개기 -> 메서드 작성 -> 메서드 분리 과정의 필요성을 느꼈고, 그 과정을 단순화하기 위해 첫날부터 스프링의 DI 원리를 파고들었다.
  • 스프링 시리즈를 참고해서 MVC 패턴과 객체지향 원리등의 핵심 개념이 어디에서 온 것인지에 대한 고민에 시간을 가장 많이 투자했다.
  • 개념을 학습하는 것과 주어진 요구사항을 일치시키는 것은 다른 문제라는 것을 알았고, 요구사항을 우선해야할 필요성을 느꼈다.
  • 그 과정에서 생성자 주입, 의존성 주입을 사용하는 이유에 대해 고민하고 알게되는 시간을 가졌다. 시간내에 완전히 적용해서 구현된건진 모르겠어서 추가 학습이 필요해보인다.

고민하는 과정 속에서 객체(클래스)를 생성할 때 특정한 패턴을 발견하게 되었다.

상수
멤버
생성자 (의존성 주입)
메서드

  • 일급 컬렉션과 메서드 분리에 더 주의를 기울여보고 싶다.

컨벤션 적용

  • Git 커밋 컨벤션을 준수하려고 노력하다보니 작업 단위를 기능 별로 분리해서 등록하려는 고민을 많이 하게 되었다. 미션 중에는 부족하다고 느꼈는데 지난 주와 확연히 달라지고 있는걸 느껴져서 신기하다. 동시에 아직 많이 부족함을 느낀다.
  • 기능 구현을 겨우 마쳐서 이번주는 프로그래밍 언어 컨벤션을 모두 지키지 못했다. 3주차는 자바 컨벤션도 모두 지키는 것에 도전해보려고 한다.
profile
네 스스로 변화하라 🔥

1개의 댓글

comment-user-thumbnail
2022년 11월 10일

잘보고갑니다!

답글 달기