12. 창발성

켄트백의 단순한 설계 네 가지로 우수한 설계의 창발성을 촉진하는 것

켄트백의 단순할 설계 네 가지#

중요한 것부터 나열

  • 모든 테스트를 실행한다
  • 중복을 없앤다
  • 프로그래머의 의도를 표현한다
  • 클래스와 메서드 수를 최소로 줄인다

1. 모든 테스트를 실행한다#

  • 의도한 설계대로 돌아가는 시스템을 내놓기 위해 테스트는 필수적
  • 테스트 가능한 시스템으로 만들기 위해 노력하기
  • 결합도가 높으면 TC 작성이 어려워 자연스레 TC 작성하며 결합도를 느슨하게 할 수 있음
    • DI, interface, 추상화 등

리팩터링#

  • 새로 추가한 코드가 품질을 낮추지 않는가를 맘속에 새기며 리팩터링
  • 코드를 정리하면서 시스템이 깨질 걱정은 테스트로 덜어낼 수 있음
  • 아래는 리팩터링 하는 3가지 방법에 해당함

2. 중복을 없애라#

  • 똑같은 코드, 비슷한 코드, 구현 중복 등 다 중복의 한 형태
  • 으으이이ㅣ이이이지 (의지) 가 필요
size() 재활용으로 isEmpty() 에 비슷한 구현 없애기
boolean isEmpty() {
return 0 == size();
}
Template Method 패턴을 적용해 중복 제거
abstract public class VacationPolicy {
public void accrueVacation() {
calculateBaseVacationHours();
alterForLegalMinimums();
applyToPayroll();
}
private void calculateBaseVacationsHours() { /* ... */ };
abstract protected void alterForLegeMinimums();
private void applyToPayroll() { /* ... */ };
}
public class USVacationPolicy extends VacationPolicy {
@Override
protected void alterForLegaMinimums() {
// 미국 최소 법정 일수 사용
}
}

3. 의도를 표현하라#

  • 나중에 코드를 유지 보수할 사람이 직접 만든 사람보다 깊이 이해할 확률은 희박
  • 의도를 분명히하여 그래도 유지보수할 분이 이해될 수 있도록 배려해야함

실천 가이드#

가장 중요한건 노력과 배려

  • 좋은 이름
  • 함수와 클래스 크기 가능한 줄이기
  • 표준 명칭 사용
  • 단위 테스트 꼼꼼히 작성

4. 클래스와 메서드 수를 최소로 줄여라#

  • 독단적인 견해는 멀리하고 실용적인 방식을 택하자

실천 예#

반드시 따라야 한다는 건 아님

  • 클래스 마다 인터페이스 생성
  • 자료 클래스와 동작 클래스 분리
Last updated on