과제
자동차 경주 게임이다. 게임의 로직은 같은 시간동안 최대한 멀리 간 참여자가 우승하는 것이다.
https://github.com/snaag/java-racingcar-6
후기
갈아엎고 다시하기
처음에는 의미로 클래스를 나누고, 작업의 흐름을 위주로 생각하다보니 놓치는게 많았다. 그래서 한번 갈아엎었다.
예를들어, 사용자의 입력이 있으니 Player 클래스가 필요하다고 생각했으나... 막상 코드를 작성해보니 사용자는 단순 입력 및 유효성체크 외엔 없어서 Player 클래스는 필요가 없어졌다.
또 Controller 인 RacingCarGame 에서 게임의 진행과 로직을 관리해도 될 거라고 생각했지만, 생각보다 로직이 복잡했다. 그래서 RacingCarGame 외에 RacingCarRace 라는 게임 진행 로직을 담당하는 Model 클래스를 추가했다.
그래서 RacingCarGame 에서는 입력을 받고, 이 값들을 잘 정리해서 RacingCarRace 에 넘겨주도록 했다. 그리고 RacingCarRace 에서 List<RacingCar>
관리 및 게임 진행 로직을 관리했다.
이 외에도 처음에 생각했던 설계와 달랐던 부분이 많이 있었다.
그래서 의미의 흐름도 좋지만, 값들이 어떻게 주고받아질지를 먼저 고려한다면... 의존관계를 고려할 수 있으므로 보다 구조적으로 잘 설계할 수 있을 것이라는 생각이 들었다.
고려했던 것들
depth 가 최대 2까지만 가능한 규칙이 추가되었다. 이에 depth 를 최소화하다보니 함수가 작아지고, 각 함수는 해야 하는 일만 집중할 수 있었다. 작성하고보니 훨씬 간결하고 눈에 잘들어왔다.
지난번 과제보다 의존관계를 고려해봤다. 예를들어 RacingCarRace 는 RacingCar 에 의존하고 있다. 의존관계 필요한 이유는 복잡한 로직을 분리하기 위함이었다. 이 때 이 복잡한 로직을 Controller 가 관리하는 것이 나을지, (내 코드 처럼) RacingCar 라는 새로운 Model 클래스를 만들어서, 얘가 관리할지 고민했다. 결론은 RacingCarRace 에서 관리하는 것으로 했다.
공부할 것들
Static Class 와 정규식, 테스트 코드 문법에 대한 공부가 필요하다고 느껴졌다.
이 외에도 어떤 값들을 주고받는지에 따른 의존관계가 고려된 설계가 필요하다고 생각했다.
'우아한테크코스 > 프리코스' 카테고리의 다른 글
2023 우아한테크코스 6기 프리코스 후기 (0) | 2023.11.15 |
---|---|
우아한테크코스 프리코스 3주차 과제 후기 - 로또 게임 (0) | 2023.11.08 |