[4주차] 체스 - level1 마지막 미션 본문

우아한테크코스 4기/코드리뷰

[4주차] 체스 - level1 마지막 미션

giron 2022. 4. 8. 23:09
728x90

Level 1의 마지막 미션으로는 체스 미션을 진행했다.

1단계에서는 콘솔 창에서 명령어를 입력해서 체스 게임을 할 수 있도록 구현했다.

2단계에서는 1단계에서 작성했던 도메인을 기반으로 자바 spark로 jdbc를 이용해 db와 연동되도록 구현했다.

 

1. 상황에 적절한 예외를 던지자.

무지성 Illegal 멈추자

이펙티브 자바에 의하면

  • IllegalArgumentException은 허용하지 않는 인수가 들어오는 경우
  • IllegalStateException은 객체가 메서드를 수행하기에 적절하지 않은 상태인 경우
  • UnsupportedOpertionException 은 호출한 메서드를 지원하지 않을 때 사용한다.

위 코드는 한 번 override된 메서드이므로 UnsupportedOperationException보다는 IllegalStateException이 더 어울린다.

IllegalStateException vs UnsupportedOpertionException

2. 주석을 달지 말자

주석을 없애자!

클린 코드 스터디에서도 학습했지만 막상 실전에 적용하지 못했다. 코드를 작성하다가 알고리즘이 기억이 안 나서 적어두었다.

주석을 적었다는 것은 그만큼 코드가 한 번에 읽히지 않는다는 뜻이다. 코드는 신문기사 읽듯이 읽혀야 하는데 말이다. 

  • 코드가 수정될 때 주석이 수정되지 않으면 오해를 불러일으킬 수도 있다.
  • 소스코드의 길이도 길어진다.
  • 주석이 있으면 다른 개발자가 보기에 중요한 내용일수도 있어서 함부로 지우지 못하므로 레거시한 코드가 늘어나게 된다.

3. DTO는 어디서 변환하는게 좋을까?

토니의 명쾌한 리뷰!ㅠㅠ쵝오

DTO에서 도메인을 인자로 받아 변환해주면 될 것 같다. (단, 도메인 클래스에서 DTO로 변환하지 말자!

도메인에서 변환하면 도메인의 의존성이 짙어지고 DTO의 변동에 영향받을 수 있기 때문이다.)

4. 디미터의 법칙2

디미터의 법칙은 우테코를 진행하면서 여러 번 들었다. 하지만 이번에 새로운 고민을 하면서 추가해보았다.

DTO로 변환할 때는 어쩔수없이 내부 값을 보내야 하므로 디미터의 법칙이 어길 수밖에 없다고 한다.

즉, dto나 컬렉션 객체와 같은 자료 구조의 경우에는 어길수밖에 없다!

5. JS에서 ==과 ===

js에서 ==은 형 변환을 하여 값을 비교하고 ===은 형변환을 하기 전에 비교한다.

즉, ==으로 비교하면 254=='254'가 true가 나오고 254==='254'는 false가 나온다!

따라서 아래의 토니의 말씀처럼 ===을 주로 사용해서 비교해주자!(지금까지 ==을 주로 사용해왔다..)

이해가 쏙쏙!

6. 모킹을 적용한 테스트의 장점

나중에 아래 링크의 책도 읽어봐야겠다!

7. dao 테스트를 어떻게 해야 하나

친절하게 답변해주신 토니!

  1. 운영 db와 테스트 db를 분리
  2. 스프링 프레임워크 - @sql 어노테이션을 통한 truncate SQL파일 만들기
  3. EntityManager를 이용한 초기화
  4. testcontainers를 이용한 컨테이너 초기화

와 같이 다양한 방법들이 있었다. 이번 미션에서는 우선 테스트가 끝날 때마다 테스트할 때 생성했던 데이터를 날려줬다.

8. JDBC를 사용하면서 느낀 점

jdbc를 통해 쿼리를 직접 짜고 도메인과 매핑시키면서 어려운 점이 많았다. 도메인과 디비의 모양이 일치했다면 얼마나 편할까라는 생각을 했다. 하지만 완벽한 설계는 존재할 수가 없기 때문에 이러한 괴리는 생길 수밖에 없는 것 같다.

이번에 jdbc를 경험해보면서 jpa의 장점을 느낄 수 있었다.

이전에 스프링으로 프로젝트를 진행해보면서 ORM프레임워크인 JPA를 이용했는데, jpa가 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것이 얼마나 편했는지를 알 수 있었다.

 

pr 주소: https://github.com/woowacourse/java-chess/pull/295

pr 주소: https://github.com/woowacourse/java-chess/pull/357

 

728x90

'우아한테크코스 4기 > 코드리뷰' 카테고리의 다른 글

레벨2 - 지하철 노선도  (0) 2022.05.16
레벨2 - 체스  (0) 2022.05.02
[3주차] 블랙잭  (0) 2022.03.18
[2주차] 로또  (0) 2022.03.08
[1주차] 자동차 구현  (0) 2022.02.26
Comments