김동형수 개발기

테스트 주도 개발 - 1부 11장 본문

책 스터디/[완료] 테스트 주도 개발

테스트 주도 개발 - 1부 11장

김동형수 2022. 9. 14. 00:54

11장 모든 악의 근원

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 X 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용?
  • Money 반올림?
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • 5CHF X 2 = 10CHF
  • Dollar / Franc 중복
  • 공용 equals
  • 공용 times
  • Franc와 Dollar 비교하기
  • 통화?
  • testFrancMultiplication 제거

Dollar, Franc에는 이제 달랑 생성자 밖에 없다.

단지 생성자 때문에 하위 클래스가 있을 필요는 없기 때문에 제거하는게 좋겠다.

코드의 의미를 변경하지 않으면서도 하위 클래스에 대한 참조를 상위 클래스에 대한 참조로 변경할 수 있다.

이후 중복이 되는 동치성 테스트를 제거한다.

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 X 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용?
  • Money 반올림?
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • 5CHF X 2 = 10CHF
  • Dollar / Franc 중복
  • 공용 equals
  • 공용 times
  • Franc와 Dollar 비교하기
  • 통화?
  • testFrancMultiplication 제거

클래스 대신 currency를 비교하도록 강요하는 테스트 코드는 여러 클래스가 존재할 때만 의미가 있다.

이해하기로는 인스턴스 필드의 값으로 구분지어지는 적은 수의 하위클래스가 있다면 equals에 인스턴스가 아닌 getClass() 메서드를 이용해서 동치성 검사를 한다고 이해했다.

하위 클래스인 Franc을 제거하는 중이기 때문에 Franc에 대한 테스트 및 클래스를 제거한다.

Franc, testDifferentClassEquality()를 제거한다.

현 상태의 코드에서 Money의 하위 클래스인 Dollar, Franc의 로직 차이는 currency가 다른 것 말고는 로직상에 차이가 없기 때문에 Franc을 위한 테스트인 testFrancMultiplication()을 지워도 신뢰를 잃지 않을 것이다.

 

정리

  • 하위 클래스의 속을 들어내는 걸 완료하고, 하위 클래스를 삭제했다.
  • 기존의 소스 구조에서는 필요했지만 새로운 구조에서는 필요 없게 된 테스트를 제거했다.

 

Comments