[내일배움캠프] 숫자 야구 게임 구현 - 요구사항 정리 및 설계

2024. 9. 12. 20:19내일배움캠프

 두 번째 개인과제는 '숫자 야구 게임' 을 구현하는 것이다. 오늘은 해당 과제의 요구사항을 분석/정리한 뒤 생각해본 계획에 대해 적어본다.

 

요구사항을 분석/정리해 보니 전체적인 그림이 어느 정도 그려졌는데, 이전 '계산기' 구현 과제의 경우 요구사항 레벨 별로 구현방식이 정해져 있다보니 계산기를 레벨 별로 구현한 뒤 합치는 방식으로 진행을 하였는데, 이번 과제의 요구사항 레벨은 진행 단계의 느낌이 강해서 한 프로젝트 내에 여러 게임을 만드는 것이 아닌 하나의 게임을 구현할 것이다.

 

결과적으로 프로젝트에 하나의 게임(application)을 구현하게 된 만큼 좀 더 객체지향스럽게 구현해 보고자 하였고, 아래의 내용을 작성하게 되었다.

 

1. 요구사항 분석 및 정리

 프로젝트 요구사항은 여기에 정리해 두었다.

 

 

2. 설계

  요구사항 분석을 한 결과 아래의 이미지를 만들 수 있었다.

'숫자 야구 게임' application 의 주요 기능

 

일단 '숫자 야구 게임' 이 정상적인 흐름을 가지기 위해서는 크게 위와 같은 4가지 기능들이 필요하다 생각한다. 각각의 기능을 설명하면

  • 게임 정답 생성 : 게임이 시작되면 'application' 은 해당 라운드의 정답을 생성하고 가지고 있어야 한다.
  • 플레이어 입력 : 게임 진행을 위해 플레이어(사용자)가 정답이라 생각되는 값을 입력할 수 있어야 한다.
  • 정답-입력 비교 : 'application' 은 플레이어가 입력한 값을 생성해둔 값과 비교하여 게임을 진행해야 한다.
  • 결과 저장 : 플레이 정보를 저장해 추후 사용자가 자신이 플레이 기록을 확인 할 수 있어야 한다.

각 기능은 결국 '숫자 야구 게임' 이 정상 실행되기 위한 필수 기능이라 판단, 각 기능을 '도메인(domain)' 으로 두고 구현하면 어떨까하는 생각을 하게 되었다.

 

도메인에는 각 기능에 대한 인터페이스를 생성하고 구현 클래스(구현체)를 생성할 생각이다. 만약 '플레이어 입력' 기능이 이전과 달라진다면 기존 구현 클래스를 수정할 것이 아니라 새로운 구현 클래스를 작성해 객체만 갈아끼우면 되기 때문이다. 

 

또한 조금 더 나아가 대략적으로 각 클래스가 어떤 필드, 메서드를 가지게 될지 아래의 이미지로 표현해 보았는데

대략적인 클래스 구성 예상

 

일단은 클래스명이나 메서드명을 지정하지 않고 해당 클래스가 어떤 역할을 가지며, 어떤 기능을 수행하는 필드, 메서드를 가지게 될지 예상해 보았다.

 

 

3. 마무리

 막상 개발에 들어가면 생각한 것처럼 구현이 되지 않을 수도 있겠지만 이렇게 계획하는 것과 안하는 것은 분명 차이가 있을 것이다. 요구사항을 분석하고 대략적이긴 하나 어떻게 구성할지 계획을 세웠기 때문에 충분히 도움이 될 것이라 생각한다.