1주 차 미션 : 자동차 경주 - 단위 테스트
저장소 : github.com/jhhj424/java-racingcar/tree/jhhj424
RacingCar 1차 리뷰 : github.com/next-step/java-racingcar/pull/1662
RacingCar 2차 리뷰 : github.com/next-step/java-racingcar/pull/1703
RacingCar 3차 리뷰 : github.com/next-step/java-racingcar/pull/1717
후기
- 의미 있는 메서드, 클래스 명명이 쉽지 않았다.
- 좋은 테스트 코드 작성을 위한 핵심 로직의 설계가 어려웠다.
- 지킨다면서 지켰지만 객체지향 생활 체조 원칙이 뜬금없이 삐걱될 때가 있었다.
- 모든 step이 다 Merge 되고 정말 많은 변화가 있었다고 자신할 수 있다.
이번 과정에서 중심적으로 연습할 객체지향 생활 체조 원칙
- 규칙 1: 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
- 규칙 2: else 예약어를 쓰지 않는다.
두 가지의 원칙을 통해 메서드 분리를 하고, 메서드가 한 가지의 역할만 가지도록 한다.
이번 과정의 목표 경험 4가지
- Github 기반의 온라인 코드 리뷰 경험
- Junit을 활용 한 단위 테스트 경험
- 자바 code convention을 지키면서 프로그래밍하는 경험
- 메서드를 분리하는 리팩터링 경험
내 코드 피드백
매직 넘버들을 제거하는 과정에서 사용하는 상수들의 명명을 좀 더 명확한 명칭으로 하자!
이 부분은 코드를 작성하면서 크게 생각지 못했던 부분인데 꼼꼼한 피드백을 해주셨다.
코드 작성 시에 좀 더 꼼꼼하게 체크해야겠다.
클래스 내부에서 사용하는 메서드에 대한 접근제어자를 public으로 그냥 처리해 둔 곳이 있었다.
다음부터는 접근제어자도 생각을 하면서 외부에서 참조가 필요하지 않다면 private로 작성하고, 테스트는 public으로 열어놨던 메서드를 통해서 진행하나 혹시라도 테스트가 필요한 내부 메서드의 경우에는 protected로 선언하면 좋을 듯하다! 👍
마지막 5단계 요구사항이었던 리팩터링 과정에서, View와 핵심 로직의 역할을 확실히 구분하는데 애를 좀 먹었다.
리뷰어분께서 한번 더 상세한 피드백(아래)을 통해 확실한 이해를 도와주셨다.
처음에 리뷰를 통해 방향을 짚어주셨는데, 내가 이해한 부분이랑 달라서 두 번의 피드백을 받았다.
덕분에 다음 미션에서는 확실하게 View와 Domain을 구분할 수 있을 것 같다.
마지막으로 주신 피드백
해당 피드백을 바탕으로 다음 미션에서 진행할 단계를 한번 생각해 봤다.
- 요구사항 및 기능 정리
- 요구사항을 기반으로 객체 디자인 진행
- To-do List를 작성
- 테스트 코드 작성
- 실제 코드 구현
- 테스트 코드를 바탕으로 실제 코드 리팩터링
- 4 ~ 6 단계를 반복하며 TDD를 습관화 하기
이러한 단계로 진행하도록 해야겠다.
이번 1주 차 미션에서는 그동안 내가 짜 왔던 쓰레기 같은 코드
를 버리고 덜 냄새나는 코드
를 작성하고 테스트할 수 있는 경험 및 역량을 키웠다고 생각한다.
매일매일 step 별로 과제를 진행하고 리뷰어분의 코드 리뷰와 Q&A를 할 수 있어서 너무 좋았던 것 같다.
나중은 결코 오지 않는다. - Clean Code (로버트 C. 마틴)
단순한 기능 구현만을 위한 쓰레기 코드를 작성하지 말자, 나중에 리팩터링 하겠다는 말은 안 하겠다는 말과 같다. - 지토
댓글