우아한 테크 캠프 pro

[우아한테크캠프pro] 1주차 미션 후기 및 코드리뷰 정리 (로또 - TDD)

뚜키 💻 2022. 2. 8. 17:27
반응형

[우아한테크캠프pro] 1주차 미션 후기 및 코드리뷰 정리 (로또 - TDD)

 

👉 저장소 링크

https://github.com/jennie267/java-lotto-pro/tree/jennie267

 

GitHub - jennie267/java-lotto-pro: NEXTSTEP 엔터프라이즈 Pro 과정을 위한 저장소

NEXTSTEP 엔터프라이즈 Pro 과정을 위한 저장소. Contribute to jennie267/java-lotto-pro development by creating an account on GitHub.

github.com

 

👉 코드리뷰 링크

 

✔ 후기

1주차 미션을 하면서 그동안 깊은 생각없이 개발을 했구나 라는걸 느꼈다. Clean Code에 대해 깊게 생각해보게되었다. 개인적으로 네이밍이 어려웠다. 의미있게 지어야하는데 길이도 적당하게 짓는게 쉽지않았다.

TDD를 경험했다. TDD로 개발을 해보니 개발에 들어가기전에 고민을 더 많이하게 되고 오버엔지니어링을 덜하게 되었다. 그리고 테스트 코드가 탄탄하게 뒷받침해주니 버그를 찾기쉽고 리팩토링도 두렵지 않게되었다.

회사에 코드리뷰를 도입한지 얼마안됐는데 이번 교육을 통해 받은 양질의 코드리뷰덕분에 회사 코드리뷰 문화를 어떤식으로 이끌어가는게 좋은지 배웠다.

첫주차였기에 앞으로 미션기간동안 어떤 방향으로 진행을 해야할지 혼자 시행착오가 많았는데, 감사하게도 리뷰어님이 칭찬을 아끼지않으셔서 덕분에 남은 미션들도 두려움없이 도전할 수 있었다.

 

✔ 목표

  • TDD 기반으로 프로그래밍하는 경험
  • 메소드 분리 + 클래스를 분리하는 리팩토링 경험
  • 점진적으로 리팩토링하는 경험
  • Clean Code

 

✔ 노력한 점

  • 적절한 역할과 책임
  • 객체지향 생활 체조 원칙 지키기
    • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
    • 규칙 2: else 예약어를 쓰지 않는다.
    • 규칙 3: 모든 원시값과 문자열을 포장한다.
    • 규칙 5: 줄여쓰지 않는다(축약 금지).
    • 규칙 8: 일급 콜렉션을 쓴다.

 

✔ 배운 점

1. 유틸클래스 인스턴스화 방지

유틸클래스를 만들때 인스턴스화를 방지해주는것이 좋다.

해당 내용에 대해 찾아보니 책 이펙티브 자바에 해당 내용이 나온다.

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

이펙티브 자바는 읽다가 우테캠을 시작해서 잠시 멈춰있는데... 😂 (공부해야할것도많고 읽을것도 참 많다 ㅠ)

올해안에 꼭 다 읽어야겠다...🔥

 

2. 언더바(혹은 언더스코어)를 사용해서 숫자 가독성 높히기

자바7 이후부터 _를 숫자 리터럴에 사용할 수 있다. _를 쓰면 가독성이 높아져서 되도록 큰 숫자일때는 사용하는게 더 좋아보인다.

하지만 맨 앞과 맨 뒤, 소수점 앞,뒤, F, L의 앞,숫자 문자열이 예상되는 위치(0, 0x의 사이나 뒤)에는 넣을 수 없다.

 

3. 디미터 법칙 (Law of Demeter)

디미터 법칙은 멀리 떨어져있는 객체에 메시지를 보내지말라는게 핵심 내용이다. 1주차 미션을 하면서 처음 알게된 법칙인데 요즘 읽고 있는 책 객체 지향과 디자인 패턴에서도 해당 내용이 나온다 (최범균 지음. p.51 5.4 캡슐화를 위한 두 개의 규칙)

  • 메서드에서 생선한 객체의 메서드만 호출
  • 파라미터로 받은 객체의 메서드만 호출
  • 필드로 참조하는 객체의 메서드만 호출

리뷰어님이 주신 링크 : https://dundung.tistory.com/203

 

4. 자주 사용하는 부분은 정적 상수로 선언하여 사용하기

 

5. 매직넘버 추출

매직넘버 추출도 자주 놓치는 것 중 하나..😥 되도록 추출하려고 하는데 개발하다보면 이정도 숫자는 그냥 놔둘까? 혹은 나중에 다 빼야겠다! 싶은 마음에 자꾸 놓치게된다.

리뷰어님이 주신 링크 : https://hoonmaro.tistory.com/44

 

6. 적절한 Exception 발생시키기

기능 요구사항 중에 `6. 음수를 전달할 경우 RuntimeException 예외가 발생해야 한다.` 라는 요구사항이 있었는데 정말 아무생각없이 그대로 RuntimeException을 발생시켰다..

이 리뷰 덕분에 앞으로는 Exception을 발생시킬때 적절한 Exception을 발생시켰나 다시한번 생각해보게되었다!

리뷰어님이 주신 링크 : https://cheese10yun.github.io/checked-exception/

 

7. 정적 팩토리 메서드 사용하기

정적 팩토리 메서드는 기존에도 많이 사용했는데 (책 이펙티브자바에서 알게됨) 간혹 이렇게 빼먹을때가 종종 있다 😂

아이템 1. 생성자 대신 정적 팩토리 메소드를 고려해라.

나는 주로 개발시에 일단 러프?하게 기능을 만들어놓고 하나씩 리팩토링해가듯이 일괄로 이런 부분들(매직넘버 추출이라던가..)을 바꾸는데 그러다보니 이렇게 놓치게되는것같다. 그리고 모든 부분을 정적 팩토리 메서드로 만들어야하는지도 고민된다.. 근데 생성자 대신 정적팩토리메서드를 쓰는게 좋으니 앞으로는 개발시에 그때그때 사용해야겠다.

리뷰어님이 주신 링크 : https://johngrib.github.io/wiki/pattern/static-factory-method/

 

 

✅ 참고링크

https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html

반응형