본문 바로가기
우아한테크캠프pro

[우아한테크캠프pro] 1주차 미션 RacingCar 후기, 코드리뷰 (자바 백엔드, NextStep, 우아한형제들, 우테캠pro, 우테캠프로)

by 개발하는 지토 2020. 12. 10.

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을 구분할 수 있을 것 같다.


마지막으로 주신 피드백

해당 피드백을 바탕으로 다음 미션에서 진행할 단계를 한번 생각해 봤다.

 

  1. 요구사항 및 기능 정리
  2. 요구사항을 기반으로 객체 디자인 진행
  3. To-do List를 작성
  4. 테스트 코드 작성
  5. 실제 코드 구현
  6. 테스트 코드를 바탕으로 실제 코드 리팩터링
  7. 4 ~ 6 단계를 반복하며 TDD를 습관화 하기

이러한 단계로 진행하도록 해야겠다.

 


 

이번 1주 차 미션에서는 그동안 내가 짜 왔던 쓰레기 같은 코드를 버리고 덜 냄새나는 코드를 작성하고 테스트할 수 있는 경험 및 역량을 키웠다고 생각한다.

 

매일매일 step 별로 과제를 진행하고 리뷰어분의 코드 리뷰와 Q&A를 할 수 있어서 너무 좋았던 것 같다.

 


나중은 결코 오지 않는다. - Clean Code (로버트 C. 마틴)

 

단순한 기능 구현만을 위한 쓰레기 코드를 작성하지 말자, 나중에 리팩터링 하겠다는 말은 안 하겠다는 말과 같다. - 지토

댓글