우아한 테크 코스 프리코스 1주차 후기

우아한 테크 코스 프리코스 1주차 후기

2020, Nov 27    

숫자 야구 게임 ⚾

링크 : https://github.com/lns13301/java-baseball-precourse/tree/lns13301

회고록

  1. 코드 구현

    • 이번 코드를 구현할 때, 요구 사항을 충족하되 나만의 추가적인 약속을 만들었다.
      • indent depth <= 1
        • indent depth 를 1개까지만 허용하는 부분은 반복문을 모두 재귀 함수로 바꾸어 해결하였다.
        • 대신 이와 같이 해결하는 상황 때문에 게임 시작 시 컴퓨터가 생성하는 세 자리 난수를 생성자에서 생성하는 과정에서 인자로 ‘new ArrayList()’를 넣어주어야 하는 부분이 마음에 들지 않았다.
        • 그래도 반복문을 최대한 줄임으로써 코드를 보기는 편했다.
      • 메소드 길이는 최대한 <= 10 - 그 다음으로 메소드 길이를 최대한 줄여보는 것인데, 이 것은 최대한 기능단위로 분리하는데 도움을 준 것 같다.
        • 다만, 기능 단위의 분리는 했지만 클래스 단위의 분리는 아직 미숙한 것 같다.
        • 다음 과제부터는 기능 설계하는 단계에서 최대한 클래스를 세분화 해봐야겠다.
      • Getter, Setter 사용하지 않기
        • Getter, Setter 를 사용하지 않고 프로그램을 구현한 것은 이번이 처음인 것 같다. 값을 넣고 판단해서 결과를 알려주는 방식으로 코딩했다.
        • 그러다보니 ‘GameManager’ 클래스에서 대부분의 기능을 수행하게 되었고, 이는 클래스 분리를 하지 못하게 되는 원인이 되었다.
      • 기능 단위 분리
        • 기능 단위 분리는 쉬운 것 같으면서도 어려웠다.
        • 기능으로 생각되는 것은 다 분리하면 된다고 생각했지만 무엇보다도 분리된 기능의 기능 이름을 정하는 것에서 어려움을 느꼈다.
        • 클래스 세분화와 동시에 기능을 어떻게 분리할 지 생각하고 기능 단위별 구현할 이름의 공식같은 것을 생각해 봐야겠다.
      • 하드 코딩 하지 않기
        • ‘OutputView’ 클래스의 메소드를 제외하고 모든 값들은 하드코딩 하지 않고 진행해 보았다.
        • 결과적으로 코드를 보기가 수월해졌다.
        • 다만, 정적 변수가 많아지면서 코드가 길어지는 느낌이 들어서 다음부터는 enum 을 사용해 보도록 하겠다.
  2. 느낀점

    • 작년 과제는 숫자 야구 게임을 구현하는 것이 미션이었지만, 올해는 특정 기능을 제공하고 해당 기능을 이용하여 구현하는 것에서 차이점이 있었다.
    • 그래서 Scanner 부분이 난감했는데, 원래라면 InputView 를 따로 만들어서 사용할 계획이었지만, Main 에 Scanner 를 활용해야하다보니 마땅한 생각이 들지 않아서 Application 에서 기능을 구현하게 되었다.
    • 그리고 전체적으로 코드가 한눈에 쉽게 들어오는 느낌이 살짝 부족했기 때문에 다음 미션부터는 클래스 가지는 기능의 수를 줄이고 분리해서 가독성 좋은 코드를 만드는 것을 목표로 해야겠다.
    • 코딩을 할 때마다 이전에 만들었던 코드보다 부족한 부분이 어느정도 메꾸어지지만 새롭게 불만족스러운 부분이 생기기 마련인 것 같다.
      • 하지만 이러한 과정을 겪기 때문에 성장하는 것이 아닐까?
    • 이번 과제보다 더 나은 실력으로 다음 과제에 임하도록 해야겠다.