Posts 숫자 야구 게임 구현하기 (2)
Post
Cancel

숫자 야구 게임 구현하기 (2)

들어가기 전


내 마음대로 구현해봤던 숫자 야구 게임 구현하기 1편에 이어, 박재성님의 피드백 강의를 듣고 느낀점과 TDD 방식으로 개발하면서 느낀점을 정리해보려고 한다.

TDD 연습해본 코드

피드백 강의를 통해 배운 것


TDD 관련

  • 테스트 코드 작성은 잘 정리된 요구사항을 기반으로 할 때 수월하다.
  • DB, UI, 랜덤값 등과 같이 테스트하기 어려운 부분보다는 util성 메서드, input/output 명확한 것 등 테스트하기 쉬운 영역부터 해나가는 것이 좋다.
  • 큰 단위로 TDD를 하려고하기 때문에 힘든 것이다. 최대한 작은 단위로 쪼개보자.
  • 테스트하기 어려운 영역과 테스트하기 쉬운 영역을 분리(격리)할 수 있어야한다.

도메인 모델 관련

  • 나는 게임에 참여하는 주체인 Player, Opponent 등에 초점을 맞췄었다.
  • 강의에서는 게임의 참여하는 주체가 아닌, 야구 게임에서 활용되는 숫자에 초점을 맞췄다.
    • 즉, 하나의 숫자를 Ball 객체로, 여러 개의 숫자를 Balls 객체로 바라보았다.
  • 같은 애플리케이션을 어떤 관점에서 보는지에 따라 완전히 다른 설계가 가능하다는게 흥미로운 것 같다.

기타

  • 데이터를 가져와서 무언가 하려고하지 말고, 해당 데이터를 갖고있는 객체에게 메시지를 전달하는 방식으로 하자.
  • 요구사항 분석을 통해 대략적인 설계 : 객체 추출
  • UI, DB 등과 의존관계를 가지지 않는 핵심 도메인 영역 집중 설계

TDD로 구현해보기


1~4번을 반복하면서 개발한다.

  1. 요구사항을 기반으로한 테스트 코드 작성
  2. 컴파일 에러 해결
  3. 테스트 케이스를 어떻게든 통과하도록 로직 작성
  4. 리팩토링

요구 사항 정리

기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.

  • 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
    • e.g. 상대방(컴퓨터)의 수가 425일 때, 123을 제시한 경우 : 1스트라이크, 456을 제시한 경우 : 1볼 1스트라이크, 789를 제시한 경우 : 낫싱
  • 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다.
  • 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다.
  • 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.

느낀점

  • 요구사항이 있어도 어떤 것 부터 테스트코드로 작성해야 할지 잘 모르겠다.
    • 일단 작은 단위부터 테스트 하자.
    • 예를 들어 아래와 같은 기능을 구현해야 한다면, 숫자 하나씩 있는 것 부터 도전해보자.
    1
    2
    3
    4
    
    com = Balls(Arrays.asList(1,2,3));
    user = Balls(Arrays.asList(1,3,2));
    
    com.play(user); // 1 strike, 2 ball
    
  • 강의로 볼 땐 수월해보였는데 막상 혼자 하려니 막막하다.
    • 스스로 고민도 많이 해보고 꾸준한 연습이 필요할 것 같다.
  • 커밋 단위를 잘 조절하자. 하다보니 커밋하지 않고 너무 많은 코드를 작성했다.
This post is licensed under CC BY 4.0 by the author.

숫자 야구 게임 구현하기 (1)

도메인 모델과 유스케이스