1주차 때보다 구현에 걸리는 시간이 많이 줄어들었습니다. 코드리뷰와 전체 피드백을 기반으로 코드짜는 방식을 개선해보았는데 덕분에 클린코드에 더 가까워진 기분이 듭니다. 그런데 미션을 한 번 해보니까 1주차 때보다 더 어떻게 진전시킬 수 있을지 모르겠는 상태가 빨리 왔습니다.(커밋 수도 그래서 줄어들었습니다.) 그래서 1주차 때보다 코드리뷰를 더 길게 받아보고 3주차 미션은 일요일 즈음부터 구현을 시작해야겠습니다. 🥺

이번 자동차 경주 미션의 경우 구현 방법은 단순했지만 여러 테스트 코드를 작성하고 클래스, 메서드 명을 짓는 과정이 꽤나 까다로웠습니다. 특히 평소에 영어에 익숙지 않아서 이름을 짓는 과정에서 인터넷 사전을 많이 찾아보곤 했습니다. 📕

1주차 때는 mvc 패턴이란 것을 제대로 모르고 contrller 패키지 내부에서 로직처리를 대부분 담당했어서 각 클래스가 어떤 역할을 하고 있는지 한 눈에 알기 어려웠습니다. 다행히 1주차 코드리뷰를 받으면서 이 부분에 대한 지적이 있었고 2주차 미션에서는 service 패키지에 유틸리티 클래스를 만들어서 복잡한 계산을 처리하도록 만들었습니다. 이렇게 하니까 필요한 부분에 메서드를 사용하기도 쉬웠고 각 객체들의 책임과 역할이 명백해졌습니다. 👍

우승자를 걸러내는 메서드에서 스트림을 사용하면 1등을 쉽게 찾아낼 수 있을거라 생각했지만 이는 오산이었습니다. 스트림의 max()나 maxBy()를 이용해서는 공동 우승자를 찾아내지 못하고 오직 한 명의 우승자만 찾아낼 수 있었습니다. 그래서 먼저 1등의 점수를 찾고 1등의 점수와 일치하는 자동차를 찾아내서 우승자를 찾아내야 했는데 이 부분이 살짝 비효율적이라고 느껴졌습니다.😱 그리고 만약 공동 우승자에 대한 테스트 코드를 작성하지 않았다면 리팩토링 과정에서 max()로 하나의 우승자만 찾아서 반환해놓고 그대로 미션을 제출했을 가능성도 있었습니다. 다시 한 번 단위 테스트의 중요성을 느끼게 되었습니다. 🥺

1주차와 마찬가지로 for, while문을 전혀 사용하지 않았고 스트림과 forEach()를 사용해서 반복문을 처리했습니다. 이게 바랍직한 건지는 잘 모르겠지만 스트림을 알면 알수록 스트림으로 할 수 있는게 많아졌고 덕분에 스트림 코드를 짜는게 제일 즐거웠습니다. 3주차 미션도 스트림을 적극 활용해서 복잡한 로직을 단순한 코드로 풀어내고싶습니다.🤣

1주차 미션이 끝나고 바로 코드리뷰를 받았는데 2주차 미션이 바로 시작되어서 2주차 미션을 진행한다고 코드리뷰를 8번 밖에 받지 못했습니다. 그런데 생각 외로 2주차 미션을 구현하는 것 자체는 시간이 널널했습니다. 오히려 어디를 리팩토링 해야할지 찾는데에 시간이 많이 들었습니다. 그래서 이번에는 3주차 미션을 조금 늦게 시작하더라도 널널하게 코드리뷰를 받아봐야겠다는 생각이 들었습니다. 🧐

그래도 열심히 코드를 짜고 다른 사람들과 공유하고 코드리뷰를 주고받는 것 자체가 굉장히 신선한 경험이었고 재밌었습니다. 우아한테크코스에 함께 할 수 있을지는 모르겠지만 코드리뷰 문화는 계속해서 접하고싶어졌습니다. 최종 테스트까지 가지 못하더라도 마음맞는 사람들과 코드리뷰 스터디를 꼭 가져야겠습니다.