첫 번째 미션 - 레이싱 게임 미션 회고

Posted by yunki kim on February 21, 2022

레이싱 게임 미션 요구사항은 다음과 같다.

기능 요구사항:

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
  • 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
  • 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
  • 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.

프로그래밍 요구사항:

  • 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외
  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.
  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.를 지키며 구현한다.
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
  • 규칙 2: else 예약어를 쓰지 않는다.를 지키며 구현한다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
  • 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
    • 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.

기능 목록 및 commit 로그 요구사항

 

  • 기능을 구현하기 전에 README.md 파일에 구현할 기능 목록을 정리해 추가한다.
  • git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.

 

회고

페어 프로그래밍

  세상 행복했다❤️. 드디어 분업이 아닌 협엽을 경험했고 나홀로 코딩이 아닌 같이 하는 코딩을 경험했다. 드디어 같이 개발에 대해 일방적이 통지가 아닌 토론을 할 수 있다는 사실이 너무 행복했다.

리팩토링

  페어프로그래밍을 통해 완성한 코드를 PR하고 피드백을 받았을 때 역시 세상 행복했다?. 그동안은 코딩을 할때는 과연 이게 효율적인가, 좋은 구조인가를 혼자 고민하고 혼자 수정했어서 많이 답답했는데 1:1 코드 리뷰라니~~~~. 

  피드백을 통해 개선한 점과 공부한 것들은 다음과 같다.

  MVC에 대해 돌아보게 되었다. 기존에는 express와 react로 프로젝트를 진행했었다. 여기서 react는 view를 담당하고, express에서는 models라는 디렉토리 안에 모델을 넣어 놓는 등 그냥 프레임워크를 사용한다는 것만으로도 어느 정도 MVC의 형태가 갖춰졌다. 그때문에 MVC의 일부 규칙에 대해 소홀했었는데 이번 미션을 통해 해당 부분들을 다시 한번 공부하게 되었다.

  mockito 사용에 대해 고민하게 되었다. 예전에는 내가 직접 컨트롤 할 수 없는 부분에 대해 테스트를 진행해야 한다면 아무 생각 없이 mockito를 사용했다. 하지만 mockito의 사용은 좋은 코드 구조가 아님에도 테스트를 통과하게 해준다는 피드백을 받아 mockito를 사용하는 대신 코드 구조를 개선하게 되었다. 이를 통해 입력과 출력을 명확히 예측할 수 있는 테스트를 작성할 수 있게 되었다. 요구 사항을 보다 명확히 나타내고, 수정 시 버그 발생 여부를 보다 잘 파악할 수 있는 테스트가 되었다.

  코드를 작성하는 행위에 대해 돌아보게 되었다. 지금까지 개발을 하면서 좋은 코드와 좋은 설계에 대해 혼자 고민을 해왔지만 그럼에도 나도 모르게 "그냥"이라는 단어가 어울리는 코드를 많이 작성했었다. 하지만 리뷰를 통해 같은 결과를 출력하는 코드를 좀 더 좋은 방식으로 바꾸면서 에티터를 키고 내가 타이핑 하는 모든 글자는 의미를 가져야 한다는 생각을 하게 되었다. 스페이스 하나도 컨벤션이다, 생각을 하자.