우아한테크코스 6기 : 프리코스 1주차 회고

Handwoong
self-retrospect
Published in
5 min readOct 25, 2023

1주차 미션 — 숫자 야구 게임

이번주 목표

오리엔테이션과 미션 메일을 보고 파악한 1주차 미션의 목표는 요구사항 분석컨벤션 지키기이다.

요구사항 분석

평소 요구사항을 분석하고 정리한 후 개발을 진행하는 것이 아닌 개발을 진행하면서 머릿속 생각의 흐름대로 코드를 작성했었다. 이번 미션을 진행하면서 개발을 진행하기 전에 요구사항을 먼저 이해하고 분석하는 습관을 들이고자 했다.

문제점

처음 요구사항을 분석할 때 어떻게 정리해야 하는지 막막함을 느꼈고, 요구사항을 그대로 옮긴 것 같은 결과가 나오게 되었다.

- 3자리의 수를 입력받는다.
- 컴퓨터의 수와 입력받은 수를 비교한다.
- 비교한 결과가 일치하면 게임을 종료한다.
- 게임이 종료되면 재시작 할건지 선택한다.

이렇게 작성된 요구사항 분석을 가지고 구현을 진행하였고, 하나의 요구사항을 구현하는 단위가 너무 크다는 것을 알 수 있었다. 또한 구현단위가 크다보니 온전히 하나의 기능에 집중하지 못했고, 코드 컨벤션과 커밋 컨벤션을 지키기에도 어려움을 주었다. 하지만 구현을 한 번 진행해보면서 어떻게 정리해야할지 감을 잡고 개선을 진행하였다.

개선

개선에 앞서 구현을 완료했던 브랜치는 삭제하고 새 브랜치를 생성하여 요구사항 분석부터 다시 시작했다. 이번에는 조금 더 세분화하여 필요한 기능 단위로 나누어 문서를 정리하였다.

- 입력
- 입력 안내 메시지를 출력한다.
- 사용자가 입력한 내용을 반환한다.

- 출력
- 게임 시작 안내 메시지를 출력한다.
- 게임 결과를 전달 받아 결과를 출력한다.

- 야구 게임
- 컴퓨터의 숫자를 생성한다.
- 사용자의 입력을 전달 받아 결과를 생성한다.

- 플레이어
- 사용자가 입력한 값이 유효한지 검사한다.
- 유효하다면 공을 생성한다.

새로 정리한 요구사항 분석을 가지고 구현을 진행하였고, 구현 도중 부족하다 느끼거나 필요한 기능들은 문서에 추가하면서 진행했다. 최종적으로 구현을 마쳤을 때 아래와 같은 요구사항 분석 명세서가 나오게 되었다.

- 입력
- 입력 안내 메시지를 출력한다. ✅
- 사용자가 입력한 내용을 반환한다. ✅

- 출력
- 게임 시작 안내 메시지를 출력한다. ✅
- 게임 결과를 전달 받아 결과를 출력한다. ✅
- 게임 종료 시 게임 종료를 출력한다. ✅

- 야구 게임
- 컴퓨터의 숫자를 생성한다. ✅
- 결과 생성 전 스코어 보드를 초기화한다. ✅
- 사용자의 입력을 전달 받아 결과를 생성한다. ✅
- 결과를 생성 할 때 플레이어에게 인덱스를 전달해 공을 받아온다. ✅

- 플레이어
- 사용자가 입력한 값이 유효한지 검사한다. ✅
- 유효하다면 공을 생성한다. ✅
- 인덱스를 전달받아 인덱스에 맞는 사용자의 공을 반환한다. ✅

- 진행자
- 야구 게임을 시작 시킨다. ✅
- 야구 게임을 진행한다. ✅
- 게임 결과가 3스트라이크라면 게임을 종료 시킨다. ✅
- 3스트라이크가 아니라면 게임을 계속 진행 시킨다. ✅
- 게임 종료 시 게임을 계속 진행할지 물어본다. ✅
- 잘못된 값 입력 시 계속 물어본다. ✅

- 유효성 검사
- 입력 값의 길이를 검사한다. ✅
- 입력 값이 숫자인지 검사한다. ✅
- 입력 값의 숫자 범위를 검사한다. ✅
- 입력 값에 중복 숫자가 있는지 검사한다. ✅

필요할때마다 추가하고 수정하며 세분화한 명세서는 컨벤션을 지키는데 큰 도움이 되었다.

컨벤션 지키기

컨벤션 지키기를 이번주 목표로 잡은 이유는 2주차부터 피어리뷰를 진행할 수 있기 때문이다. 코드 컨벤션이나 커밋 컨벤션 모두 다른 사람이 코드를 읽을 때 이해를 돕는다. 읽는 사람이 코드를 잘 이해해야 좋은 리뷰를 받을 수 있을거라 생각했고, 피어리뷰를 위해 조금 더 신경쓰고자 했다.

여기서 신기한 경험을 할 수 있었는데 요구사항 분석을 정리한대로 따라가니 코드 컨벤션과 커밋 컨벤션이 같이 따라오는 것이었다. 특히 커밋 컨벤션의 경우 커밋 제목 짓기에 어려움 없이 명확한 제목을 작성할 수 있었다.

img

야구게임 스코어 보드를 초기화하고, 결과를 계산한다. 명확한 제목으로 인해 읽는 사람 또한 한눈에 이 커밋이 어떤 작업을 했는지 알 수 있게 되었다.

코드 컨벤션의 경우 우테코 PR전 체크리스트에서 일급 컬렉션에 대한 키워드를 얻을 수 있었다.

야구 게임 모델에서 컴퓨터, 플레이어, 결과를 모두 관리한다.
야구 게임 모델은 게임을 위해 필요한 컴퓨터의 공을 생성하고, 결과를 관리의 책임을 가지고 있지만 플레이어의 입력을 검증하고 생성할 책임은 없다. 이때 일급 컬렉션을 적용하여 야구 게임 모델의 책임을 줄일 수 있게 되었다.

느낀점

요구사항을 분석하는 것만으로 코드의 퀄리티가 올라가는 느낌을 받을 수 있었다. 메소드는 알아서 분리되었으며 클래스가 가지던 책임 또한 분산되었다.
커밋 메시지에 대한 고민 없이 명확하게 딱 떨어졌을 때 받았던 느낌이 너무 좋았다. 남은 프리코스 미션이 기대된다.

--

--

Handwoong
self-retrospect
0 Followers
Editor for

Backend Developer (Java, Spring)