들어가는 말
우아한테크코스 레벨1의 네번째 미션은 체스 미션이다.
이번 미션의 목표는 OOP와 DB다.
체스 미션은 4개의 step으로 이루어져 있다.
step 1, 2, 3에서는 체스를 구현하고, step 4에서는 체스 미션에 DB를 적용하는 식으로 단계가 구성되어 있다.
디자인 패턴
체스 게임에서 중점적으로 볼 부분은 명령어, 기물 추상화, 게임 진행 상태라고 생각한다. 이 부분은 각각 커맨드 패턴, 템플릿 메서드 패턴 또는 상속, 상태 패턴이라는 디자인 패턴들로 구현할 수 있다.
- 커맨드 패턴
start, end, move $1 $2, status같은 명령어들을 enum으로 만들고, 인자 개수를 검증할 수 있고, 각각 명령어마다 액션들을 Map으로 만들어서 처리해줬다. - 추상 클래스 상속
체스에서는 폰, 퀸, 킹, 룩, 비숏, 나이트이라는 기물들이 있다. 각 기물들은 갈 수 있는 위치라는 알 수 있다는 공통된 행동을 기대한다. 또한 각 기물들은 색이 있고, 기물 타입이 존재한다. 이를 이해하고 추상 클래스로 Piece를 만들어서 사용했다. - 또한 한 칸씩 갈 수있는 SingleStepPiece와 여러 칸씩 움직일 수 있는 MultiStepPiece를 추상화해서 공통된 로직과 역할을 분리할 수 있었다.
- 상속 패턴
게임에는 상태가 존재한다. 이것은 명령어와 의존적이기도 하다.
처음에 Ready상태가 있고, start 명령어를 입력하면 Move상태가 된다.
Move상태에는 색이 있고, Move상태에서 기물을 움직이면 흰색 -> 검은색, 또는 검은색 -> 흰색으로 턴이 변경되고 Move상태로 다시 이동한다. 명령어 end를 입력하면 Move 상태에서 End상태로 변할 수 있다.
DB
step 4에서는 자바에서 지원하는 JDBC를 이용해서 체스 게임을 처음부터 시작하거나 이어서 하는 것들을 구현해봤다. 코드에 적용하지는 않았지만 당연하게 생각했던 커넥션 풀이나 JDBC를 사용하는 공통 로직을 분리하는 JDBC Template등에 대해서 알 수 있었다.
나 같은 경우는 내 코드에서 가장 적합한 기보를 저장하는 방식으로 체스 게임을 저장했다. 매 move마다 source, target을 저장하고, 게임을 불러올 경우 모든 move를 다시 돌려서 이전 체스판을 불러오는 방법이다. 상태 패턴을 사용했기 때문에 현재 턴도 문제 없이 불러올 수 있었다.
끝내며
마지막 체스 미션에서는 테코톡과 글쓰기 미션이 겹치기도 해서 바빴다. 또한 레벨1이 끝난다는 생각에 우테코 분위기가 전체적으로 퍼지는 것 같았다.
귀찮아서 회고를 쓰지 말까도 살짝 고민했다.
레벨 1 전체적으로 리뷰어들이 칭찬만 많이 해줘서 자신감이 생기기도 했지만 오만함도 커졌다. 리뷰어의 말에 따르면 코드가 복잡하지 않고, 요구 사항을 충족하는 적절한 코드라고 한다. 칭찬도 좋지만 많은 피드백을 받지 못하고 있는 것 같아서 솔직히 아쉽기도 하다.
다음 레벨부터는 스프링 시작이다.
스프링과 DB를 정복해봐야겠다...
내가 작성한 코드는 링크에서 확인할 수 있다.
체스 코드
'우아한테크코스 6기 백엔드' 카테고리의 다른 글
[우아한테크코스 6기 백엔드] 방탈출 사용자 예약 회고 (0) | 2024.12.19 |
---|---|
[우아한테크코스 6기 백엔드] 방탈출 예약 관리 회고 (0) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 블랙잭 회고 (3) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 사다리 타기 회고 (0) | 2024.12.19 |
[우아한테크코스 6기 백엔드] 자동차 경주 회고 (1) | 2024.12.19 |