Page tree
Skip to end of metadata
Go to start of metadata

시작은 어디서부터 하는 것이 좋을까?

  • 지뢰 찾기 게임의 시나리오를 기반으로 클래스 설계를 하는 것이 좋을까?
  • 현재 스터디의 목적은 OOP, TDD, Refactoring을 연습하기 위함이다.
    • 가장 작은 단위로부터 TDD로 구현한다.
      • 최초 언어의 학습, TDD, Refactoring 학습을 위한다면 가장 작은 단위로부터 시작하는 것이 좋겠다.
    • 지뢰 찾기 게임에 대한 시나리오를 기반으로 테스트를 만들고 이 시나리오를 하나씩 해결한다. => Walking Skeleton을 먼저 만든다.
      • TDD와 언어 사용이 익숙하지 않은 상태에서는 힘들다고 생각한다. 

가장 작은 단위부터 시작한다면..

  • 작은 단위로부터 시작할 경우 숲을 보지 못하는 경향이 있다.
  • 중간, 중간에 설계하는 과정을 거쳐야 한다. 설계 시점을 찾는 것이 중요할 것으로 본다.
  • 진행 과정
    • 실패하는 단위 테스트
    • Pass
    • Refactoring
    • 반복

ATDD 기반으로 시작한다면..

  • 간단한 초기 설계를 통해 숲을 보려는 노력을 한다.
  • 진행 과정
    • 초기 설계
    • 실패하는 인수 테스트 작성
    • 실패하는 단위 테스트 작성
    • 테스트 통과
    • 리팩토링
    • 반복
  • 초기 설계
    • Minesweeper : Controller 역할, 사용자의 입력을 받아 Model(Grid)에 전달하고, 결과를 받는다. Model에서 전달한 결과를 View에 전달한다.
    • GridInitializer : Grid를 초기화
    • Model
      • Grid : 지뢰 게임의 엔진
      • Row : 지뢰 게임의 열
      • Square : 지뢰 게임의 한 Cell
    • View : Minesweeper에서 전달한 Grid를 전달받아 콘솔 화면을 생성한다.

1 by 1 to do list

  • Square 초기화 한다. => close 상태, mine이 아닌 상태
  • Square를 open 한다.
  • Square를 mine을 가지는 상태로 변경한다.
  • Square가 mine이 아닐 경우 open하면 win
  • Square가 mine일 경우 자동으로 win
  • Square가 close 상태일 경우 ' '를 반환한다.
  • Square를 open할 때 mine이 아니면 숫자 '0'을 반환한다.
  • Square를 open할 때 mine이면 '*'를 반환한다.

2 by 2 to do list

  • Grid를 초기화한다. => row, col
  • (1, 1)이 지뢰이고, (1, 1)을 open하면 게임에 진다.
  • (1, 1)이 지뢰이고, (1, 1)을 open하면 주변의 지뢰 숫자가 공개된다.
  • (0, 0)에 지뢰를 설치할 때 주변 square의 주변 지뢰 숫자가 1씩 증가한다.
  • 모두 지뢰가 아닌 경우 특정 위치 하나를 open하면 모든 square가 open된다. win 상태
    • 좌표가 벗어나는 범위를 열면 exception이 발생한다.
  • 모두 지뢰인 경우 자동으로 win
  • No labels