🔖 오늘 읽은 범위 : 12장, 창발성
우리들 대다수는 켄트 백이 제시한 단순한 설계 규칙 네 가지가 설계 품질을 크게 높여준다고 믿는다.
켄트 벡은 다음 규칙을 따르면 설계는 ‘단순하다’고 말한다.
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머 의도를 표현한다.
- 클래스와 메서드 수를 최소로 줄인다.
위 목록은 중요도 순이다.
boolean isEmpty(} {
return 0 == size( } ;
}
소규모 재사용이란 공통적인 코드를 뽑아 함수로 만들거나, 클래스를 세분화해 가시성을 높이는 것을 의미한다.
public class VacationPolicy {
public void accrueUSDivisionVacation ( ) {
// 지금까지 근무한 시간을 바탕으로 휴가 일수틀 계산하는 코드
// ...
// 휴가 일수가 미국 최소 법정 일수틀 만족하는지 확인하는 코드
// ...
// 휴가 일수를 급여 대장에 적용하는 코드
// ...
}
public void accrueEUDivisionVacation( ) {
// 지금까지 근무한 시간을 방으로 휴가 일수를 계산하는 코드
// ...
// 휴가 일수가 유럽연합 최소 법정 일수를 만족하는지 확인하는 코드
// ...
// 휴가 일수를 급여 대장에 적용하는 코드
// ...
}
abstract public class VacationPolicy {
public void accrueVacation() {
calculateBaseVacationHours();
alterForLegalMinimums() ;
applyToPayroll() ;
}
private void calculateBaseVacationHours( ){ /* ... */ };
abstract protected void alterForlega1Minimums( ) ;
private void applyToPayroll( ){ /* ... */ };
}
public class USVacationPolicy extends VacationPolicy {
@Override protected void alterForLega1Minimums( ) {
// 미국 최소 법정 일수틀 사용한다.
}
}
public class EUVacationPolicy extends VacationPolicy {
@Override protected void alterForLega1Minimums( ) {
// 유럽연합 최소 법정 일수틀 사용한다.
}
}
창발적 설계?
결합도(Coupling) ↔ 응집도(Cohesion)
결합도
응집도
참고 링크: 결합도와 응집도는 무엇일까?
TEMPLATE METHOD