Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Kotlin
- 테스트
- 계층형아키텍처
- 아키텍처
- 이펙티브코틀린
- DDD
- 헥사고날아키텍처
- 조영호
- 유지보수
- GrokkingFunctionalProgramming
- template
- 추상화 설계
- 책스터디
- 코틀린
- 개발방법론
- FP
- 함수형프로그래밍
- 도메인 주도 개발 시작하기
- 클린아키텍처
- 개발서적
- web
- Thymeleaf
- Spring
- Java
- Boot Legacy 차이점
- 스터디
- TDD
- 테스트주도개발
- 만들면서배우는클린아키텍처
- 객체지향의사실과오해
Archives
- Today
- Total
김동형수 개발기
테스트 주도 개발 - 1부 8장 본문
8장 객체만들기
할일목록
- $5 + 10CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10amount를 private로 만들기Dollar 부작용?- Money 반올림?
equals()- hashCode()
- Equal null
- Equal object
5CHF X 2 = 10CHF- Dollar / Franc 중복
공용 equals- 공용 times
Franc와 Dollar 비교하기- 통화?
Franc, Dollar times() 코드가 거의 똑같다.
타입을 Money로 반환하면 더 비슷하게 만들 수 있다.
다음 단계로 뭘 해야 할지 명확하지 않다.
Money의 하위 클래스는 많은 일을 하는 것 같지 않으므로 아예 제거해버리고 싶다.
한번에 큰 단계를 밟는 것은 TDD를 효과적으로 보여주기에 적절하지 않을 것 같다.
Money에 Dollar를 반환하는 팩토리 메서드를 도입할 수 있다.
테스트 코드에서 인스턴스 생성하던 부분은 Money의 static 메소드를 활용해서 생성 후 반환한다.
Dollar, Franc에 대한 참조가 사라진다.
Money 클래스의 하위 클래스를 제거하고 팩토리 메서드를 도입하기 위해서 Money의 times()는 추상메소드로 지정하고 Money 또한 추상클래스로 지정한다.
Dollar, Franc의 존재를 클라이언트 코드에서도 알지 못하게 되었다.
하위 클래스를 테스트에서 분리(decoupling)함으로써 어떤 모델 코드에도 영향을 주지 않고 상속 구조를 마음대로 변경할 수 있게 됐다.
할일목록
- $5 + 10CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10amount를 private로 만들기Dollar 부작용?- Money 반올림?
equals()- hashCode()
- Equal null
- Equal object
5CHF X 2 = 10CHF- Dollar / Franc 중복
공용 equals- 공용 times
Franc와 Dollar 비교하기- 통화?
- testFrancMultiplication을 지워야 할까?
정리
- 동일한 메서드의 두 변이형 메서드 서명부를 통일시킴으로써 중복 제거를 향해 한 단계 더 전진했다.
- 최소한 메서드 선언부만이라도 공통 상위 클래스로 옮겼다.
- 팩토리 메서드를 도입하여 테스트 코드에서 콘크리트(??) 하위 클래스의 존재 사실을 분리했다.
- 하위 클래스가 사라지면 몇몇 테스트는 불필요한 여분의 것이 된다는 것을 인식했다. 하지만 일단 그냥 뒀다.
'책 스터디 > [완료] 테스트 주도 개발' 카테고리의 다른 글
테스트 주도 개발 - 1부 12장 (0) | 2022.09.14 |
---|---|
테스트 주도 개발 - 1부 11장 (0) | 2022.09.14 |
테스트 주도 개발 - 1부 7장 (0) | 2022.09.07 |
테스트 주도 개발 - 1부 6장 (0) | 2022.08.30 |
테스트 주도 개발 - 1부 5장 (0) | 2022.08.30 |
Comments