단순한 결합이 복잡한 결과를 나타내는 것.
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머의 의도를 표현한다.
- 클래스와 메서드 수를 최소로 줄인다.
- 테스트가 불가능한 시스템은 검증도 불가능하다.
- 검증이 불가능한 시스템은 절대 출시하면 안 된다.
- 테스트 케이스가 많을수록 개발자는 테스트가 쉽게 코드를 작성한다.
- 결합도가 높으면 테스트 케이스를 작성하기 어렵다.
- 테스트 케이스가 있기 떄문에 코드를 정리할 때 걱정이 없다.
- 응집도를 높인다.
- 결합도를 낮춘다.
- 관심사를 분리한다.
- 시스템 관심사를 모듈로 나눈다.
- 함수와 클래스의 크기를 줄인다.
- 클래스와 메서드 수를 줄인다.
- 더 나은 이름은 선택한다.
- 중복을 없앤다.