창발적 설계로 깔끔한 코드를 유지하자
켄트 백의, 단순한 설계 규칙 4가지
[1] 모든 테스트를 실행한다.
[2] 중복을 없앤다.
[3] 프로그래머 의도를 표현한다.
[4] 클래스와 메소드 수를 최소로 줄인다.
단순한 설계 규칙 1 : 모든 테스트를 실행하라
- 검증이 불가한 시스템은 없어야 한다.
- 검증이 가능한 시스템은 품질이 높다.
- SRP를 준수하는 클래스는 테스트가 쉽다.
- 테스트가 가능한 시스템을 만들면, 더 나은 설계가 가능하다.
- 결합도가 높으면 테스트를 작성하기 어렵다.
- 테스트 케이스를 많이 작성하다보면 자연스럽게,
DIP 원칙을 적용하고, 인터페이스와 추상화를 통해 결합도를 낮추게 된다.
단순한 설계 규칙 2~4 : 리팩토링
- 코드를 점진적으로 리팩토링하는 방법
- 코드 몇 줄을 추가할 때마다, 잠시 멈추고 설계를 조감한다.
- 코드가 설계 품질을 떨어뜨린다면? 테스트 케이스를 돌려 기존 기능 깨뜨리지 않는지 확인
- 응집도를 높이고, 결합도를 낮추고,
관심사를 분리하고, 시스템 관심사를 모듈로 나누고,
함수와 클래스 크기를 줄이고,
더 나은 이름을 선택하는 등의 기법으로 리팩토링을 해라.
중복을 없애라
- 중복 = 추가 작업, 추가 위험, 불필요한 복잡도
- 비슷한 코드는 더 비슷하게 고쳐주고, 중복을 없애라
- 중복된 코드를 빼놓으니, SRP를 해친다면? 클래스를 만들어 따로 관리하자.