uncategorized

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

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

1주차 문제 깃허브 링크

https://github.com/woowacourse/java-baseball-precourse

문제 간단 요약

우리가 흔히 아는 야구게임을 자바로 구현하는 게 1주차 문제다.
세개의 수를 입력받고 해당 자릿수에 맞는 숫자를 입력한 경우 스트라이크 추가,
자릿수는 맞지 않지만 맞는 숫자를 포함한 경우 볼 추가해서 결과를 반환한다.

3 스트라이크. 즉 정확히 맞출 경우 게임을 종료하고,
다시 게임을 시작을 할 수 있도록 해야한다.

마주한 문제들

요구사항 작성하기

일단 우테코 프리코스는 가장 먼저 요구사항을 작성해야 한다.
요구 사항을 기능 중점으로 정리해서 README.md를 작성해야 하는게 첫 단계다.

처음에 필자는 그냥 우테코에서 작성된 요구사항을 마구잡이로 요구사항을 만들었는데,
나중에 코드를 작성하려고 했더니, 어떤 요구사항 먼저 해결해야 할 지 막막했다.

그래서 내가 고민하고 고안해낸 요구사항 분석하는 방법은 다음과 같다.

  1. 가장 먼저 전체적인 프로그램의 흐름을 이해한다.
  2. 요구사항은 기능 관점에서 작성한다.
  3. 요구사항은 의존 관계가 가장 느슨한 것 먼저 우선순위로 작성한다.
    • 1주차 프리코스의 문제에서는 목표 숫자를 난수로 만드는게 가장 의존 관계가 느슨하다.
    • 이게 무슨 말이냐면, 목표 숫자를 난수로 만드는 기능은 다른 기능의 힘을 필요로 하지 않는다는 의미다.
  4. 최대한 각 기능들이 서로의 역할을 간섭하지 않도록 하라.
    • 일단 한 기능에서 예외처리를 담당하면, 다른 기능에서는 예외처리 책임을 질 필요 없다.
    • 예외처리를 해야 될 경우 예외처리를 담당하는 기능과 협력하도록 하자.

이렇게 요구사항 목록을 작성하고 나면, 프로그래밍을 하는 과정에서 빼먹는 요구사항을 최소한으로 줄일 수 있다.
또한 요구사항 구현 순서를 어느정도 정리하고 작성하기 때문에 구현을 더 원활하게 할 수 있다.

깃 사용

우테코 프리코스는 깃 커밋을 신중하게 작성해야 한다.
그래서 깃을 어떻게 사용하는지가 굉장히 중요하다.

  1. 기능은 따로 브랜치를 만들어서 격리된 상황에서 구현하라.
    • 기능을 만들다가 되돌리기 쉽다.
  2. 커밋 메시지를 잘 지켜서 작성한다.
    • 다른 사람이 쉽게 이해할 수 있도록 하기 위함이다.
  3. 커밋은 기능 관점에서 작성해야 한다.
    • 지나치게 세세하게 하지도 않고, 지나치게 적게 하지 않기 위함이다.

코드 작성

우아한 테크코스에서는 최대한 간략하게 코드를 작성하도록 한다.
일단 메서드가 한 역할을 잘하도록하고, 그 메서드가 15줄이 넘지 않도록 하는게 중요하다.

필자의 경우, 전체적인 기능을 정리하고 나서,
이 기능들을 어떤 클래스가 책임질 지,
혹은 메서드를 어떻게 나눌 것인지가 정말 어려웠다.

후기

프리코스에 참여해보니, 내가 그동안 얼마나 코드를 대충 짰는지 체감하는 경험이 됐다.
혼자 코드를 짜다보면 의식의 흐름대로 코드를 짜게 되는 경우가 많다.
그러다보면 한 메서드에 수많은 기능이 의존하게 되고, 유지보수도 극악에 향하게 된다.

프리코스의 요구사항을 만족하는 방식으로 프로그래밍 하다보니 자연스럽게 책임을 나누게 되고,
그 책임을 수행하는 여러 객체들의 협동으로 기능을 완성했다.
평소 코딩할 때는 생각해보지 못했던 부분을 경험할 수 있어 재밌었다.

프리코스는 코딩하는 법을 알려주지 않는다. 다만 무엇을 만들라 한다.
그런데 하다보면 알게 된다. 아무도 알려주지 않지만 스스로 알게 된다.

내가 모르는 건 스스로 찾아서 해결하게 된다. 그리고 그 정보를 체득하기 위해 노력하게 된다.

프리코스를 시작하기 전, 교육을 기획한 자바지기님은 프리코스를 우아한 테크코스를 통과하기 위한 것으로 생각하지 말고,
더 좋은 개발자가 되기 위한 과정으로 여겨줬으면 좋겠다고 하셨는데,

이번 프리코스를 통해 더 좋은 개발자가 될 수 있을 거 같다.
다음 프리코스도 더 기대가 된다.

Share