12. 창발성
켄트백의 단순한 설계 네 가지로 우수한 설계의 창발성을 촉진하는 것
- 창발성: 하위의 구성요소로 상위 수준에 효과가 나타나는 능력 '창발' 위키 설명 참조
#
켄트백의 단순할 설계 네 가지중요한 것부터 나열
- 모든 테스트를 실행한다
- 중복을 없앤다
- 프로그래머의 의도를 표현한다
- 클래스와 메서드 수를 최소로 줄인다
#
1. 모든 테스트를 실행한다- 의도한 설계대로 돌아가는 시스템을 내놓기 위해 테스트는 필수적
- 테스트 가능한 시스템으로 만들기 위해 노력하기
- 결합도가 높으면 TC 작성이 어려워 자연스레 TC 작성하며 결합도를 느슨하게 할 수 있음
- DI, interface, 추상화 등
#
리팩터링- 새로 추가한 코드가 품질을 낮추지 않는가를 맘속에 새기며 리팩터링
- 코드를 정리하면서 시스템이 깨질 걱정은 테스트로 덜어낼 수 있음
- 아래는 리팩터링 하는 3가지 방법에 해당함
#
2. 중복을 없애라- 똑같은 코드, 비슷한 코드, 구현 중복 등 다 중복의 한 형태
- 으으이이ㅣ이이이지 (의지) 가 필요
size() 재활용으로 isEmpty() 에 비슷한 구현 없애기
Template Method 패턴을 적용해 중복 제거
#
3. 의도를 표현하라- 나중에 코드를 유지 보수할 사람이 직접 만든 사람보다 깊이 이해할 확률은 희박
- 의도를 분명히하여 그래도 유지보수할 분이 이해될 수 있도록 배려해야함
#
실천 가이드가장 중요한건 노력과 배려
- 좋은 이름
- 함수와 클래스 크기 가능한 줄이기
- 표준 명칭 사용
- 단위 테스트 꼼꼼히 작성
#
4. 클래스와 메서드 수를 최소로 줄여라- 독단적인 견해는 멀리하고 실용적인 방식을 택하자
#
실천 예반드시 따라야 한다는 건 아님
- 클래스 마다 인터페이스 생성
- 자료 클래스와 동작 클래스 분리