[우테코 6기 BE] 프리코스 3주차 회고 - 로또
🍀 로또 링크
📃 구현과정
- 정해진 기능 템플릿
이번에도 기능목록을 먼저 작성하고, 기능 단위로 커밋하는 방법으로 과제를 진행 하였습니다.
3주차 로또에서는 고정된 코드를 주고, 변경을하지못하고 추가만 할 수 있는 조건이 추가 되었습니다.
저는 이 부분(validate)을 추상화 하였습니다. 다른 부분에서도 validate는 사용하지만, 다른 형태로 쓰이기 때문입니다.
순서대로 로또, 보너스번호, 당첨번호 입니다.
추상화를 적용하여 Validation처리를 하였습니다..
아래는 제 Class Diagram 입니다.. 정말 복잡하죠..? 하하...
그리고 Enum을 활용하라는 요구사항이 있어서
당첨금액을 Enum으로 활용을 해보았습니다.
ordinal의 경우 enum의 순서가 바뀌거나 새로운 값이 추가되면 사용하기 어렵다는
피드백을 받았는데, 저 부분은 빼야 해야 할듯 싶습니다.
필드에 값을 추가하고 그걸 사용해서 접근하시는걸 추천한다고 합니다!
이번에는 재입력 기능의 요구사항이 추가 되었습니다.
어떻게 처리 할지 고민하다가 InputController 를 따로 만들어서
try~catch로 입력 받는 코드를 구현 하였습니다.
자세한 코드는
https://github.com/thingineeer/java-lotto-6/tree/thingineeer
여기서 확인할 수 있습니다.
- 파일 정리
3주 차부터는 파일을 나눠보는 경험을 하였습니다.
domain 단위의 테스트 코드를 만들기 위해 domain을 설계 후 최대한 역할과 책임을 나눠보았습니다.
👷🏾♂️ 힘들었던점
아무래도 역할과 책임을 나누는 것이 가장 힘들었던 것 같습니다.
사실 정답이란 것이 없고, 단일 책임 원칙을 지키면서 최대한 하나의 메서드는 하나의 일만 하게 만드는 게 쉬운 일이 아니었습니다.
작은 단위부터 코드를 작성하는 습관을 들였지만, 시간이 너무 오래 걸렸습니다.
하지만 리팩토링하면서 왜 잘게 나눠야 해야 하는지 뼈저리게 느꼈습니다.
또한 테스트 코드를 짜는데도 꽤 공부를 많이 했어야 했습니다.
테스트 코드를 짜면서 TDD라는 기법이 왜 존재하는지 느꼈습니다..
최대한 했지만 너무 야매같은 테스트 코드는 삭제하였습니다.
마지막 4주 차는 TDD 방식으로 해볼 생각입니다. ‼️
참고로 요구 사항에 domain 로직이라는 단어가 추가되어서, 짜다 보니 MVC 패턴을 사용하는 것처럼 보이지만,
정확히 말하면 MVC 패턴이 아닙니다.
최대한 객체지향을 공부하기 위해 쪼갠 것이고, 명확하게 역할과 책임으로 분리하지 못했습니다. (숙련도 이슈)
💻 코드 리뷰
1주차 2주차에는 정말 많은 분들과 코드리뷰를 남겼습니다.
3주차 부터는 양보단 질을 위한 리뷰를 기대하면서 정말 소수의 인원으로만 리뷰를 하였습니다.
확실히 아무것도 모를때는 많은 사람들에게 조언과, 피드백을 받는게 도움이 되었고, 어느정도 자바에 익숙해 졌을때는 아키텍쳐와 도메인에 대해 고민을 많이 하게 되므로 깊게 나누는 대화가 많았습니다
☑️ 목표 체크 리스트
1. ✅ 코드 리뷰 최대한 많이 하기 ⭐️⭐️⭐️
이 부분은 퀄리티를 높이기 위해 일부러 양을 줄였습니다.
이 부분은 이번주도 잘 지켰습니다.
앞으로는 양보다는 질로 승부 볼 예정입니다.
2. ✅ 타인의 회고 보면서 남의 경험 배우기
커뮤니티를 보면서 열 분 이상의 블로그를 봤고, 어떤 걸 배우셨는지 잘 보았습니다!!
3. ✅ "객체 지향과 사실과 오해" 책 모두 읽기
전부 다 읽었고, 프리코스 이후에도 1회독 더 할 예정입니다.
4. ✅ JAVA 기본 문법 공부 하기
자바로 알고리즘 코딩테스트를 볼 수 있을 만큼 공부가 되었던 것 같습니다.
확실히 구현문제를 여러번 풀다보니 구현에는 문제 없는 사람이 되었습니다 ㅎㅎ
5. ✅ 금주 하기
금주 성공!!
6. ✅ 스터디, 러닝 외 약속 잡지 않기
스터디, 러닝 외 노는 약속은 잡지 않았습니다!