hellonayeon / clean-code

📖 클린 코드 책 내용을 정리하는 저장소
0 stars 0 forks source link

하나의 함수 당 추상화 수준은 하나 #1

Open hellonayeon opened 2 years ago

hellonayeon commented 2 years ago

03장 함수 에서 얘기하는 좋은 함수를 만드는 규칙 중 함수 당 추상화 수준은 하나로! 규칙의 의미를 모르겠다.

hellonayeon commented 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();
}

참고자료