미션은 숫자 야구 게임이다. 3개의 랜덤한 숫자가 주어지고, 이에 대해 맞춰가는 형식으로 진행하는 게임이다.
예를 들어 랜덤한 3자리 숫자가 385
라고 가정하자.
플레이어가 123
을 입력하면 3이 정답에 포함되나 자리수에 맞지 않기 때문에 1볼
이 출력된다.
플레이어가 358
을 입력하면 3자리 모두 정담에 포함되나, 3만 자리수에 맞고 나머지는 자리수가 맞지 않기 때문에 1스트라이크 2볼
이 출력된다.
우아한 테크코스 - 프리코스 2주차에 대한 회고이다.
사실 숫자야구는 정확히 1년 전쯤 짜본 적이 있다. 개발을 시작한 지 한달도 채 되지 않았을 때 짜본 경험이 있다. 그 때 생각이 나서 내가 짰던 코드들을 봤는데,
else 문의 난사
정체를 알 수 없는 컨벤션
사방팔방 보이는 for 문
그 어디에도 보이지 않는 예외처리
시크한 System.exit(0)
정말 아름다운 코드다..!
이때 생각을 하면서 지금은 이것보다는 꼭 제대로 짤 수 있게 하자 ! 라는 다짐을 했다.
프로젝트를 하면서도 느낀 것이지만, 여전히 나에게 가장 어렵다고 생각하는 것들 중 하나다.
어떻게 기능을 나누고, 그 속에서 클래스를 뽑아낼 지에 대해서 항상 어려움이 느껴지는 것 같다.
처음 내가 설계를 할때 시도하는 방법은,
1. 기능을 브레인스토밍식으로 나열하고
2. 중복된 / 상관없는 기능을 지운 다음
3. 클래스를 뽑아내서
4. 기능의 흐름에 맞게 정리한다.
이런식으로 시도하고 있는데, 코드 를 거의 다 완성시켜 갈 때 쯤, 내 클래스들을 한번 쭉 보니, 문제를 맞히는 클래스가 존재하지 않았다. 한마디로 Player
나 Pitcher
와 같은 클래스가 존재하지 않았다.
그저 입력값만 받고, 그에 대한 결과만 알려주고 있었다.
정답은 누가 맞혀 ?
라는 질문에 대답해 줄 수 있는, 책임져줄 수 있는 객체가 존재하지 않았다.
부랴부랴 정답을 맞히는 기능들을 분리해내서 Player
에 구현해준 기억이 난다.
설계 당시에는 되게 당연하게 설계했음에도, 이런 상황이 발생했음에 기분이 썩 좋지 않았던 것 같다.
항상 스트림 적용하는 것에 있어서, 스스로 볼때 90%는 이해하지 못하고 그냥 어찌저찌 사용했던 것 같다.
이번에 숫자야구 게임 미션 특성상 반복문을 통해서 배열이나 컬렉션을 탐색하는 경우가 많았는데, 이 기회 덕분에 스트림을 통해서 조건 적용, 필터링 적용, 예외 처리등 꽤 많은 것을 제대로 경험해본 계기가 되었다. 확실히 for문으로 의미없는 int i
사용해가며 작성했던 코드보다, 스트림을 통해서 깔끔하게 작성을 해주니 훨씬 보기에도 편해보였다.
물론 스트림을 적재적소에 사용해야 한다고 듣긴했다. 또한 단순한, 적은 횟수의 반복문에선 오히려 효율성 측면에서 역효과를 낸다는 것도 알고 있었으나, 이번에는 효율성을 생각하지 않고 스트림 사용하는 데에 초점을 좀 더 두고 사용했던 것 같다.
다음 기회에 반복문과 스트림의 효율성도 생각하면서 코드에 적용시켜보면 좋을 것 같다.
커밋내역을 봤을 때, 직관적으로 무엇에 대한 커밋인지 이해할 수 있도록 짜도록 노력했다.
이번 2주차에 기록된 모든 커밋이다. 그 때 당시에는 꽤 정확하게 작성한다고 했는데, 중간중간에 보면 이게 무엇일까.. 를 생각하게 만드는 커밋이 꽤 많은 것 같다.
테스트 코드 작성을 모두 해주지 못한게 아쉽다. 다음 주차에서는 모든 public 메소드와 예외 상황에 대해 테스트 코드를 작성하는 것이 목표이다.
이제 2주차인데, 고민을 하면서 결과를 만들어 내는 과정이 정말 재밌는 것 같다.
배운 것을 잊지 않고 깨달은 것을 적용해나가면서 나를 한단계 더 발전시켜야겠다.