오늘은 많은 결과물을 내지는 않았다. 커밋은 3가지만 추가했다.
숫자를 검증하는 부분에서 '0' 을 입력하는 경우를 고려하지 못해서 관련 로직을 추가했다.
테스트 케이스를 좀 더 꼼꼼히 만들었어야 했는데, 아무래도 첫 실전 테스트 코드 작성이었다 보니 정신이 없었기도 했다. 2주차 과제부터는 경우의 수를 전부 생각해보려는 노력을 해야겠다. 체크 리스트를 만드는게 좋을지도...?
그리고 싱글톤 패턴을 적용해봤다. 싱글톤 패턴은 과제를 시작하기 전부터 알고 있던 유일한 디자인 패턴이었는데, 그 이유 때문에 써먹어보고 싶었다.| 싱글톤 패턴을 공부하고 기록해놨던 것
사실 다른 클래스에도 싱글톤 패턴을 적용할 수 있었지만, 아직은 쓰는게 더 좋은지, 좋지 않은지 상황에 대한 판단이 확실치가 않았다. 이런 패턴 사용에는 장단점이 동시에 존재하니까. 공부가 더 필요하다.
그리고 Service 클래스가 게임 전반의 흐름과 상태를 관리하는 역할을 부여받긴 했지만, DTO와 소통하는 책임 정도는 분리해줘도 될 것 같아서 DtoManager로 분리해줬다. 6일차 회고에 DtoManager 를 사용하는 부분을 올렸는데 오늘 또 커밋한 이유는, DtoManager 를 사용 할지 안 할지, 그리고 사용한다면 DtoManager 에서도 각각의 담당하는 DTO 마다 클래스 분리가 일어나야 하는지에 대해 계속 고민하고 코드를 쓰고 지우고 했기 때문이다. 결론은 이번에는 한 DtoManager 객체에서 역할을 수행하는 걸로 했다. DtoManager에서 DTO 마다 클래스 분리가 일어나면 Service 에서 결국 직접 DTO 클래스와 소통하는 것과 가독성이 똑같기 때문이었다(역할의 분리는 얻지만).
과제 소요 시간 : 목~수 7일간 약 70시간
wakatime 으로 봤을 때, 6일간 IDE에 커서가 머무른 시간이 약 30시간이다.
wakatime을 금요일부터 사용해서 과제를 시작한 목요일에는 기록이 되어있지 않다. 근데 첫 날에는 설계 위주로 진행해서 30시간에서 큰 변화는 없을 거다.
나머지 40시간은 학습과 서칭, 회고글 작성을 위주로 사용했다.
기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 전부를 만족했고, 테스트를 통과했다.
내가 작성한 전체 코드의 클래스 다이어그램이다.
etc : 공통된 재시작 옵션을 포함한 Enum, 게임 결과의 타입을 담은 Enum이 있다.
이 정도면 처음치고 계층간 분리가 명확하다고 생각한다.
처음엔 mvc 패턴, 싱글톤 패턴, indent depth 가능한 1로 유지하기, 메서드 분리 잘하기 이것만 하려고 했다. 이 중 그나마 싱글톤 패턴만 이전에 학습을 했었고 나머지는 다 처음 시도하는 것이었다. 그런데 리팩토링을 계속 하면서 결과적으로는 처음 계획보다 훨씬 많은 것들을 사용하게 되었다.
당장에 생각나는 것만 적어도 이만큼이다. 일주일 만에 엄청 많은 것들을 배웠다.
일단은, 너무 재밌는 일주일이였다. 그리고 너무 빠르게 흘러간 일주일이였다. 특히 리팩토링은 시간 순삭이었다.
처음에는 '설계랑 메서드 분리만이라도 잘 해봐야겠다' 라고 생각했었는데, 구현을 하고 끊임없는 리팩토링을 하면서 mvc 패턴, dto와 service 계층, SRP 지키기, enum, 싱글톤 패턴까지 사용해보게 되었다. 더 나은 코드 작성, 더 예쁜 프로그램(사용자에게 보이지는 않지만)에 대한 갈망이 점점 커져간 것 같다.
좋은 객체지향, 깔끔한 코드에 대해서 정말 끊임없이 고민했다. 버스를 타고 이동할 때도, 밥을 먹을때도 계속 '내 코드에서 개선할 부분이 없을까?' '이걸 어떻게 개선해야할까?' 라는 생각만 했다. 꿈에서도 생성자 주입이 나오는 신기한 경험을 했다.
처음으로 객체지향에 대해 진지한 고민을 하며 만든 이 애플리케이션은 이제 내겐 아끼는 작품처럼 여겨진다. 미숙하고 울퉁불퉁하고 거친 작품이지만, 내게는 큰 의미가 생긴 것 같다. 절대 완벽하지 않지만, 일주일 동안의 내 모든 시간과 노력이 이 애플리케이션 하나에 담겨 있으니 애착이 갈 수 밖에 없는 것 같다.
다만 아쉬운 점은, 과제를 빨리 끝내고 SOLID 에 대해서 배우고 싶었는데, 리팩토링을 끊임없이 하다보니 시간이 도통 나지 않았다. 그래도 이번에 많은 시행착오를 하며 감을 잡아서 다음 주 과제부터는 리팩토링 10번 할거를 5번 정도로 줄이지 않을까 기대해본다.