본문 바로가기
개발 일기/우아한테크코스

[우테코 5기] 1차 미션 자동차 경주 정리 및 회고록

by 제이._ 2023. 2. 13.

 

약 일주일 동안 진행했던 미션이 끝이 났습니다.

 

페어 프로그래밍을 처음 해봤는데, 너무 재밌었고 배운점이 많았습니다.

같은 페어인 우르한테 인텔리제이 여러 단축키를 많이 배웠고, 같이 개발을 하면서 테스트와 여러가지 꿀팁들을 많이 얻었습니다.

 

 


강의를 들으면서 느낀 점과 궁금한 점

 

  • Q) System.out.println()을 냅두고 테스트 코드를 작성하는 이유는?
    • 기능이 커지면 sout으로는 오래 걸린다. 또한 서버도 껐다 켜야한다 등등
    • 반면, 테스트 코드를 작성하면 이러한 단점을 모두 커버할 수 있다. (단지, 테스트 작성 시에만 시간이 듬)
    • 테스트 코드를 사용하면 프로덕션 코드의 정확성을 판단할 수 있다. 리팩토링 시에도!
    • 프로덕션 코드가 잘못 됐을 때를 대비해서 테스트의 수를 늘릴 수도 있다.
    • 프로덕션 코드의 예외 상황을 생각해서 테스트의 수를 늘린다.
      • 이건 기준을 잘 잡고 어디까지 테스트를 작성해야하는지를 고민해봐야한다. (불안하지 않을 정도로...)

 

  • Q) 테스트 메서드의 실행 순서는?
    • 일반 테스트에 대해 특정 실행 순서를 적용하지 않는다. 따라서 예측할 수 없는 순서로 메서드를 작동시킨다.
    • 특정 순서를 적용하고 싶다면 @TestMethodOrder를 사용하면 된다.

 

  • Q) @DisplayName() 어노테이션이 있는데 테스트 메서드 이름이 중요한가?
    • 어노테이션은 없어도 실행이 되지만, 메서드 명은 아니다.
    • 특수 기호를 달 수 있다는 점이 @DispalyName() 어노테이션의 장점!
    • 선택의 영역

 

 

==>

강의를 진행하면서 정답을 잘 알려주지 않으신다.

아무래도 정답이 하나인 것도 아니라 편협된 생각을 갖는 걸 막기 위해서임도 있겠지만,

아마도 스스로 크루들끼리 고민하면서 다양한 답을 찾고 공유하는 목적인 것 같다.

 

여러가지 케이스에 대한 답들을 생각해낼 수 있고 배울 수 있어서 좋다.

 

 


 

페어와 미션을 구현하면서 배우고 느낀 점은 다음과 같습니다. (리뷰 전)

 

  • 도메인은 각자의 역할에 충실해야 한다.

 

  • 각 클래스는 자신에게 해당하는 일만 해야한다.
    • 부가 설명으로 예를 들면, Car 객체는 OutputView가 뭐하는지 알 필요가 없다.

 

  • 배운 테스트코드 어노테이션 (@ParameterizedTest, @CsvSource())
    • 여러 값을 테스트 할 때 이걸로 테스트 하면 여러 개를 만들 필요가 없다.

 

  • 우르에게 Interface에 대해 설명을 들었다. 프리코스 BridgeGame 미션에서 나는 랜덤 넘버 생성에 관한 테스트를 interface를 테스트용으로 만들고 return 1을 강제로 고정 시켜주었으나, 우르의 입장은 “굳이 그럴 필요가 있는가? 클래스를 만들면 될텐데 그렇게 한 이유” 를 물어봤다. 조금 더 공부해볼 필요가 있다.

 


 

제이미의 1차 피드백 내용 및 공부해야할 것들 (리뷰 후)

  • 기능 명세서 조금 더 알기 쉽게 쓰는 것이 좋다.

 

  • 메서드와 변수 네이밍 더 신경써서 쓰고 개행 및 모두 통일성 있게, 단수/복수 구별해서 작성하기
    • 전반적으로 가장 많은 피드백이었습니다.

 

  • 정적 팩토리 메서드 사용하는 것에 대한 피드백
    • 테스트가 더 쉬워질 수 있다!
    • 이름을 가질 수 있다.
    • 이펙티브 자바 참고

 

  • 테스트 코드 피드백
    • 테스트에서 예외 상황까지 모두 고려해서 테스트 케이스를 늘리는 것이 좋다.
    • 성공과 실패 건의 테스트를 구분하는 것도 하나의 방법이다.
    • 여러 Value들을 테스트 할 때 다음 어노테이션을 사용할 수 있다.
      • @ParameterizedTest + @ValueSource()
      • @ParameterizedTest + CsvSource(value, delimiter)
    • 조금 더 정리 해보자면, validate() 검사 같은 경우 위에 어노테이션을 이용해서 간단하게 여러 값을 검증해줄 수 있다!

 

  • 개행 문자 사용하기
    • Console 출력에서 '\n'은 OS마다 다를 수 있기 때문에 자바에서 제공하는 것이 있다.
      • System.lineSeparator().
      • System.getProperty("line.separator")

 

  • 책 또는 아티클 읽어보기
    • 객체지향 생활 체조 원칙
    • 테코블 블로그 정주행

 

  • final 키워드 공부하기
    • final의 역할은 '재할당'을 막아주는 것이라서 '변하지 않는다(=불변)'는 표현과 일치할 수도, 일치하지 않을 수도 있다.
    • 따라서 불변과 재할당을 알아보고 정확한 용어를 사용하는 것이 커뮤니케이션에 훨 좋을 것이다!
    • final을 붙이는 건 코드 작성의 취향을 탄다. 하지만, 사용법을 정확히 아는 것은 중요!

 

  • 일급 컬렉션, 원시값 포장, 람다 메서드 공부하기

 

 

꼼꼼한 리뷰로 끌어올려주신 코치님 최고!!

 

 

 

최종 코드 확인하기

https://github.com/sosow0212/java-racingcar/tree/step2