[프리코스 2주차] 숫자 야구 게임 미션 회고

최연재·2022년 11월 11일
0
post-thumbnail
  1. 전체적인 미션의 방향
  2. 과제를 진행하면서 배운점
  3. 추가적인 공부가 요구되는 사항들
  4. 공통 피드백

1. 전체적인 미션의 방향

이번 주차의 미션은 '숫자 야구 게임'을 만드는 것이다.
기본적인 게임의 규칙은 1부터 9까지의 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.(숫자와 자리 수가 같은 경우 - 스트라이크, 숫자만 같고 자리 수가 다른 경우 - 볼)

  • 1. 게임에 필요한 '플레이어'와 '상대방'등을 만들어서 객체 지향으로 설계한다.

  • 2. 예외를 발생시킨다. (IllegalArgumentException 이용)

  • 3. 테스트케이스 작성

2. 과제를 진행하면서 배운점

1. 객체 지향 설계

  • 숫자 야구 게임을 위해서 'Player', 'Computer(상대방)', 그리고 'Game'으로 객체를 나누었다.
    그리고 각각의 역할에 대해서 기능들을 추가하여 객체 지향적으로 개발을 진행하였다.

2. 예외 처리

  • 플레이어의 입력에 대해서 예외처리를 하였다.
    예를 들어, '서로 다른 세자리 수'를 입력해야 하는 경우에 '2자리 수를 입력하거나', '문자를 입력하거나', '223과 같이 중복된 수를 입력한 경우' 예외 처리를 하였다.

  • 그리고 예외가 발생한 경우 즉시 애플리케이션을 종료해야함으로 게임이 시작되는 순간부터 try-catch를 사용하여 예외가 발생한 경우 바로 애플리케이션이 종료되도록 처리하였다.

3. 테스크 케이스 작성

  • 'JUnit5'와 '단위 테스트'에 대해서 공부하고 블로그에 글을 올린 경험이 있다.
    JUnit5를 사용하는 것에는 문제가 없었지만 단위 테스트를 작성하는데 어려움이 있었다.
    특히 private가 있는 메서드의 경우 TEST에서 접근을 할 수가 없는 문제가 있었다. (물론 구글링을 해보니 private라도 접근하는 방법이 있었다....)(추후 해당 방법에 대한 글을 작성할 예정이다.)
    그래서 접근이 가능한 메서드를 이용하여 최대한 단위 테스트가 가능하도록 테스트를 작성하였다.

3. 공통 피드백

1. 기능 목록을 재검토한다.

  • 기능 목록을 클래스 설계와 구현, 함수(메서드) 설계와 구현과 같이 너무 상세하게 작성하지 않는다.
  • 클래스 이름, 함수(메서드) 시그니처와 반환값은 언제든지 변경될 수 있기 때문이다.
  • 너무 세세한 부분까지 정리하기보다 구현해야 할 기능 목록을 정리하는데 집중한다.
  • 정상적인 경우도 중요하지만, 예외적인 상황도 기능 목록에 정리한다.
  • 특히 예외 사항은 시작 단게에서 모두 찾기 힘들기 때문에 기능을 구현하면서 계속해서 추가해 나간다.

2. 값을 하드 코딩하지 않는다.

  • 문자열, 숫자 등의 값을 하드 코딩하지 않는다.
  • 상수(static final)를 만들고 이름을 부여해 이 변수의 역할이 무엇인지 의도를 드러내라.
  • 구글에서 "java 상수"와 같은 키워드로 검색해 상수 구현 방법을 학습하고 적용해 본다.

3. 구현 순서도 코딩 컨벤션이다.

  • 클래스는 상수, 멤버 변수, 생성자, 메서드 순으로 작성한다.

4. 변수 이름에 자료형은 사용하지 않는다.

  • 변수 이름에 자료형, 자료 구조 등을 사용하지 않는다. (ex. carNameList, arrayString 등)

5. 한 함수가 한 가지 기능만 담당하게 한다.

  • 함수 길이가 길어진다면 한 함수에서 여러 일을 하려고 하는 경우일 가능성이 높다.
  • 예를 들어 한 함수에서 '안내 문구 출력, 사용자 입력, 유효값 검증' 등의 일을 한다면 이를 적절하게 분리해야 한다.

6. 처음부터 큰 단위의 테스트를 만들지 않는다.

  • 테스트의 중요한 목적 중 하나는 내가 작성하는 코드에 대해 빠르게 피드백을 받는 것이다.
  • 시작부터 큰 단우의 테스트를 만들게 된다면 작성한 코드에 대한 피드백을 받기까지 많은 시간이 걸린다.
  • 그래서 문제를 작게 나누고, 그 중 핵심 기능에 가까운 부분부터 작게 테스트를 만들어 나간다.

4. 추가적인 공부가 요구되는 사항들

1. private로 지정된 메서드의 테스트 방법

2. 함수가 한 가지 기능만 담당하도록 설계 연습을 꾸준히 한다!

profile
가보자고

0개의 댓글