과제
자동차 경주 게임이다. 게임의 로직은 같은 시간동안 최대한 멀리 간 참여자가 우승하는 것이다.
https://github.com/snaag/java-racingcar-6
GitHub - snaag/java-racingcar-6
Contribute to snaag/java-racingcar-6 development by creating an account on GitHub.
github.com
후기
갈아엎고 다시하기
처음에는 의미로 클래스를 나누고, 작업의 흐름을 위주로 생각하다보니 놓치는게 많았다. 그래서 한번 갈아엎었다.
예를들어, 사용자의 입력이 있으니 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 |