1주차 미션으로 숫자 야구 구현이라는 비교적 간단한 과제가 주어졌지만 구현 과정은 결코 간단하지 않았습니다.🥲하지만 오히려 그런 점이 재밌었습니다. 😁

기능 목록을 작성하고 처음으로 단위 테스트를 통해 미흡하게나마 TDD를 적용해보고 갓 배운 람다와 스트림을 처음으로 프로젝트에 적용해보았습니다. 이 과정을 통해 코딩하는 것 자체가 재밌게 느껴졌습니다.

📝제일 처음 기능 목록을 작성하는 단계부터 막막하게 느껴졌습니다. 프리코스가 시작하기 전에 객체지향의 사실과 오해도 읽어보고 객체지향에 대해 공부를 좀 해봤었지만 여전히 헷갈리는 부분이 많았고 객체들에게 책임을 어떻게 줘야하는지 감이 잡히질 않았습니다. 그래서 초기에 구상했던 기능 목록과 구현한 기능 목록은 상이하게 됐고 기능 목록을 여러번 뜯어 고쳐야 했습니다.

🧮기능을 작성하기 전에 단위테스트 코드를 먼저 만들고나서 기능을 만드는 방식으로 미션을 진행했습니다. 단위 테스트를 작성해본건 이번이 처음이라 인터넷 검색을 통해 단위 테스트 작성 방법을 익혀가면서 진행을 했습니다. 처음에는 단위 테스트를 만드느라 더 오랜 시간이 걸리는데 이런 과정을 굳이 거쳐야 하나 의문을 가졌습니다.🤔

하지만 단위 테스트를 먼저 작성해 놓으니까 이후에 기능을 구현하는 속도도 빨라졌고 기능을 수정할 일이 생기면 단위테스트라는 안전장치가 생긴 덕분에 더 쉽게 기능을 변경할 수 있었습니다. 특히 이번 미션 특성상 실제 구현보다 리팩토링에 더 힘을 많이 쏟았기 때문에 정말 큰 도움을 받았습니다. 또 build.gradle을 통해 모든 테스트 코드를 한번에 돌려보고 모두 통과하는 화면을 보는게(통과하지 않았을 때도 많았지만😅) 은근 재밌었습니다. 덕분에 TDD의 강점과 단위 테스트를 잘 작성하는 것의 중요함을 알게되었습니다.

💻모던 자바 인 액션을 읽은지 1달정도 됐는데 책으로만 람다와 스트림을 배울 때는 지루하고 머리에 내용이 잘 들어오지 않았습니다. 그래서 코딩테스트 문제 몇개 풀 때를 제외하고는 책에서 배운 내용을 직접 써본적이 없었습니다.

하지만 자칫하면 복잡하게 변할 수도 있는 코드를 스트림 중간메서드와 최종 메서드를 잘 조합해서 짧고 간소하게 만들어보니 정말 재밌었고 미션을 날로먹는 기분도 들어서 약간의 희열…도 느껴졌습니다.😁 처음에는 스트림 사용에 미숙해서 투박한 코드를 만들었지만 점차 정말 많은 기능을 가지고 있는 스트림을 제대로 사용하는 방법을 깨닫고 몇번의 리팩토링 과정을 거치면서 개선시켜나갔습니다.

목요일부터 밥먹고 자는 시간을 제외하고 거의 대부분의 시간을 프리코스를 구현하거나 코드를 개선시키기 위한 독서(모던 자바 인 액션, 클린 아키텍쳐, 클린코드, Java언어로 배우는 디자인 패턴 입문 등 다양한 책을 번갈아보면서 보고 있습니다.)에 시간을 쏟았는데 의미있는 데에 시간을 써서 시간이 전혀 아깝게 느껴지지 않았습니다. ⏱️

사실 대학교도 이미 졸업했고 알바도 따로 하고있지않기 때문에 다른 지원자들 보다 프리코스에 쏟을 수 있었던 시간이 많았던 것같습니다. 🥹

하지만 좋았던 부분만 있었던 것은 아닙니다. 처음에는 기능목록을 작성하고 테스트 코드를 짜고 기능을 구현하고 리팩토링할 사항들도 넘쳐났기 때문에 할게 많아서 좋았는데 뒤로 갈 수록 저의 지식의 한계로는 코드를 어떻게 고쳐야 더 개선될 수 있는지를 도저히 모르겠는 상태가 되었습니다. 이 부분을 해소하기 위해서 1주차가 끝나는대로 코드 리뷰를 열심히 받아보고 클린코드, 클린아키텍쳐 같은 책도 더 많이 읽어보고 디자인패턴도 공부해보고 2주차에는 더 많은 부분을 개선할 수 있도록 노력해야겠습니다.🥲

아직은 많이 부족한 저도 이렇게 프리코스에 참여할 수 있는 기회를 주신 포비님, 그리고 모든 코치분들께 정말 감사드립니다.👍