오봉이와 함께하는 개발 블로그

우아한테크코스 웹 백엔드 5기 - [2주 차] 프리코스 후기 본문

1상

우아한테크코스 웹 백엔드 5기 - [2주 차] 프리코스 후기

오봉봉이 2022. 11. 3. 22:28
728x90

숫자 야구

2주 차 미션은 Java로 숫자 야구 게임을 구현하는 것이다.
수요일 오후 3시에 메일을 받고 벌써 후기를 작성하는 이유는 테스트도 통과했고 모든 기능을 완성했기 때문이다.
나.. 사실 고수일지도...?는 아니고 그냥 문제가 어렵지 않다.
몇 가지 요구 사항만 지키면서 숫자 야구를 구현하면 되기 때문이다.

우아한 테크 코스에서 제시한 기능 요구 사항을 분석해서 내가 작성한 기능 요구 사항은 아래와 같다.

내가 생각한 기능 요구 사항

  1. 숫자 야구 게임을 시작하는 기능을 구현하자.
    1. 위 기능에는 다음과 같은 기능이 있을 것 이다.
      1. 게임 시작 문구 출력
      2. 중복되지 않는 세 자리의 랜덤한 숫자를 생성 후, 반환하는 기능.
  2. 사용자가 문자를 입력하는 메소드를 만들자.
    1. 예외 사항이 발생하면 예외(IllegalArgumentException)를 발생시키는 기능을 만들자.
      1. 예외 사항 목록은 다음과 같다.
        1. 4자리 이상의 숫자 입력 혹은 입력하지 않을 경우
        2. 문자 입력(세상 모든 언어를 막을 수 없기에 특수문자, 영어, 한글로 제한)
        3. 0이 들어갈 경우
        4. 중복된 값이 입력될 경우
  3. 숫자를 비교하기 위해 입력한 숫자를 자릿수마다 잘라서 반환하는 기능을 만들자.
  4. 숫자를 비교하는 기능을 만들자.
    1. 숫자를 입력한다.
    2. 각 결과에 따라 스트라이크, 볼 count를 반환한다.
    3. 정답을 맞추면 6번을 수행한다.
  5. 숫자를 비교하는 기능을 통해 반환된 count를 통해 해당 내용을 출력해준다.
    1. 스트라이크와 볼이 혼재하면 볼을 먼저 알려주고 스트라이크를 알려준다.
    2. 스트라이크, 볼 count 모두 0이면 낫싱을 출력한다.
  6. 정답을 맞추면 게임을 새로 시작할지, 종료할지 입력 받아 사용자의 요구에 맞게 다시 동작한다.
    1. 1번을 입력해서 새로 시작하면 다시 숫자 야구 게임을 시작
    2. 2번을 입력해서 종료하면 프로그램을 종료한다.
    3. 1, 2 외의 값을 입력하면 예외(IllegalArgumentException) 발생

프로그래밍 요구 사항

우아한 테크 코스에서 제한하는 제한 사항이 존재한다.

  • JDK 11에서 동작할 것.
  • 프로그램 실행의 시작점은 Applicationmain()메서드
  • build.gradle 변경 불가능, 외부 라이브러리 사용하지 않음
  • Java 코드 컨벤션 가이드 준수
  • 프로그램 종료 시 System.exit()를 호출하지 않는다.
  • 프로그램 구현이 완료되면 ApplicationTest의 모든 테스트가 성공해야 한다.
  • 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 이름을 수정하거나 이동하지 않는다.
  • indent(인덴트, 들여쓰기)의 depth가 3이 넘지 않도록 구현한다.
    • 예를 들어 while문 안에 if문이 있다면 들여쓰기는 2다.
  • 3항 연산자를 사용하지 않는다.
  • 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.
  • JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
  • camp.nextstep.edu.missionutils에서 제공하는 RandomsConsole API를 사용하여 구현해야 한다.
    • Random 값 추출은 camp.nextstep.edu.missionutils.RandomspickNumberInRange()를 활용한다.
    • 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.ConsolereadLine()을 활용한다.

후기

1주 차 때도 느꼈던 문제지만, Java 코드 컨벤션과 Git 커밋 메시지 작성이 어렵다.
변수명을 정할 때 축약어도 사용하면 안 되고, 의도를 알 수 있는 변수명, 클래스명, 메서드명을 생각해야 하는데 이름 생각에 한세월 걸린다.
또, 기능 요구 사항 분석에 생각보다 많은 시간을 쏟았다. 많은 시간을 쏟은 덕분인지 실제 기능 구현할 때 멍 때리는 시간이 줄어서 체감상 완성하는데 시간이 단축되었다는 생각이 든다.
하나 더 어려웠던 점은 indent의 depth가 3이 넘지 않도록 하는 프로그래밍 요구 사항이다.
indent의 depth가 3이 넘지 않도록 하기 위해서는 메서드를 잘게 나누는 것이 중요한데 평소 메서드를 많이 분리하지 않는 습관이 있던 터라 메서드를 분리해서 작성하는 게 익숙하지 않았고 그래서인지 프로그램 구조가 확 떠오르지 않아 연관 메서드를 찾으며 개발하는데 시간이 소모되었다.
이번에 조금은 연습을 했으니 다음 미션에서는 조금 더 수월하게 할 수 있기를 기대한다.

후기를 작성하며 코드를 다시 검토하고 있는데 분리할 메서드가 조금 보인다. 메서드 분리에 크게 어려운 것은 없으니 리팩토링을 하도록 해야겠다.

728x90
Comments