Open hellonayeon opened 2 years ago
간단히 말해서, 하나의 함수 안에 들어있는 함수들의 수준을 동일하게
하라는 의미로 해석된다.
추상화 수준은 높음
중간
낮음
으로 분류할 수 있는데, 하나의 함수의 내용으로 이 수준이 동일하게 들어가 있어야 추상화 수준이 하나라고 말할 수 있다.
/* Good: 함수의 추상화 수준이 하나인 경우 */
public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception {
if(isTestPage(pageData))
includeSetupAndTeardownPages(pageData, isSuite);
return pageData.getHtml();
}
/* Bad: 함수의 추상화 수준이 여러개인 경우 */
public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception {
if(isTestPage(pageData)) {
// 앞서 기술한 includeSetupAndTeardownPages(pageData, isSuite) 함수의 내용을 그대로 가져와
// 추상화 수준을 한 단계 낮췄다.
includeTeardownPage();
if (isSuite)
includeSuiteTeardownPage();
}
return pageData.getHtml();
}
/* Bad: 추상화 수준이 2개인 경우 */
public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception {
boolean isTestPage = pageData.hasAttribute("Test");
if(isTestPage) {
WikiPage testPage = pageData.getWikiPage();
StringBuffer newPageContent = new StringBuffer();
includeSetupPages(testPage, newPageContent, isSuite);
newPageContent.append(pageData.getContent()); // 추상화 수준 낮음 (?)
includeTeardownPages(testPage, newPageContent, isSuite); // 추상화 수준 높음
pageData.setContent(newPageContent.toString());
}
return pageData.getHtml();
}
참고자료
03장 함수
에서 얘기하는 좋은 함수를 만드는 규칙 중함수 당 추상화 수준은 하나로!
규칙의 의미를 모르겠다.