LeeA0의 공부 일기

[Clean Code] 3장. 함수 (미완) 본문

Java/Clean Code

[Clean Code] 3장. 함수 (미완)

LeeA0 2021. 9. 11. 23:58

[사담]

더보기

하반기 시작되면서 책읽고 또 읽으면서 정리하는게 쉽지많은 않네요 ㅎㅎㅎ

그래도 최대한 시간내서 틈틈히 정리해보겠습니다~!

다다음주면 추석이네요 ㅎㅎㅎ

 

[정리]

1. 길이가 길고, 중복된 코드가 있고, 괴상한 문자열과 낯설고 모호한 자료유형과 API를 가진 코드

public static String testableHTML(
    PageData pageData,
    boolean includeSuiteSetup
) throws Exception {
    WikiPage wikiPage = pageData.getWikiPage();
    StringBuffer buffer = new StringBuffer();
    if(pageData.hasAttribute("Test")){
    	if(includeSuiteSetup){
            WikiPage suiteSepup = PageCrawlerImpl.getInheritedPage(
                SuiteResponder.SUITE_SETUP_NAME, wikiPage
            );
            if(suiteSetup != null){
            	wikiPagePath pagePath = suiteSetup.getPageCrawler().getFullPath(suiteSetup);
                String pagePathName = PathParser.render(pagePath);
                buffer.append("!include -setup .")
                    .append(PagePathName)
                    .append("\n");
            }
        }
        WikiPage setup = PageCrawlerImpl.getInheritedPage("SetUp", wikiPage);
        if(setup!=null){
            WikiPagePath setupPath = wikiPage.getPageCrawler().getFullPath(setup);
            String setupPathName = PathParser.render(setupPath);
            buffer.append("!include -setup .")
            	.append(setupPathName)
                .append("\n");
        }
    }
    buffer.append(pageData.getContent());
    if(pageData.hasAttribute("Test")){
    	WikiPage teardown = PageCrawlerImpl.getInheritedPage("TearDown", wikiPage);
        if(teardown != null){
            WikiPagePath tearDownPath = wikiPage.getPageCrawler().getFullPath(teardown);
            String tearDownPathName = PathParser.render(tearDownPath);
            buffer.append("\n")
            	.append("!include -teardown .")
                .append(tearDownPathName)
                .append("\n");
        }
        if(includeSuiteSetup){
            WikiPage suiteTeardown = WikiPage suiteSepup = PageCrawlerImpl.getInheritedPage(
                SuiteResponder.SUITE_TEARDOWN_NAME, wikiPage
            );
            if(suiteTeardown != null){
                WikiPagePath pagePath = suiteTeardown.getPageCrawler().getFullPath(suiteTeardown);
                String pagePathName = PathParser.render(pagePath);
                buffer.append("!include -teardown .")
                    .append(pagePathName)
                    .append("\n");
            }
    	}
    }
    pageData.setContent(buffer.toString());
    return pageData.getHtml();
}

<코드의 문제점>

- 추상화 수준이 너무 다양하다.

- 코드가 너무 길다.

- 두 겹으로 중첩된 if문은 이상한 플래그를 확인하고, 이상한 문자열을 사용하여, 이상한 함수를 호출한다.

 

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

 

 

 

'Java > Clean Code' 카테고리의 다른 글

[Clean Code] 4장 - 실습  (0) 2021.09.19
[Clean Code] 4장. 주석  (0) 2021.09.16
[Clean Code] 2장 - 실습  (0) 2021.09.02
[Clean Code] 2장. 의미 있는 이름  (0) 2021.08.29
[Clean Code] 1장. 깨끗한 코드  (0) 2021.08.22
Comments