본문 바로가기
까망 동네/클린 코드

[클린코드] 형식 (Format)

by 까망 하르방 2022. 7. 18.
반응형

✔️ 개념은 빈 행으로 분리

글에 문단이 있듯이 코드에도 빈 행으로 구분해주면 좋다.

public List<Cell> getFlaggedCells() {
    List<Cell> flaggedCells = new ArrayList();
    for (Cell cell : gameBoard)
        if (cell.isFlagged())
            flaggedCells.add(cell);
    return flaggedCells;
}

 

 

변수는 변수끼리, 로직은 로직끼리

적절한 행 구분은 가독성을 높여준다.

public List<Cell> getFlaggedCells() {
    List<Cell> flaggedCells = new ArrayList();


    for (Cell cell : gameBoard)
    {
        if (cell.isFlagged())
        {
            flaggedCells.add(cell);
        }
    }


    return flaggedCells;
}

 

 

✔️ 세로 밀집도

• 서로 밀집한(연관된) 코드끼리 가까이 놓는 것이다.

• 변수선언: 사용하는 위치에서 최대한 가까이 선언

void Func()
{
    int A;
    for (...)
    {
        A = ..
    }

    int B;
    for (...)
    {
        B = ...
    }

    int C;
    for (...)
    {
        C = ...
    }
}

// --------------------

void Func()
{
    int A, B, C;

    for (...)
    {
        A = ..
    }

    for (...)
    {
        B = ...
    }

    for (...)
    {
        C = ...
    }
}

 

 

loop 제어 변수는 루프 문 내부에 선언

int countTestCases ()
{
    int count = 0;
    for (const auto& each : tests)
    {
        count += each.countTestCases();
    }

    return count;
}

 

 

• 인스턴스 변수는 언어마다 알려진 위치가 다르지만

    잘 설계한 클래스는 변수간 세로 거리가 중요치 않다.

    왜냐하면 대다수 클래스 메서드가 인스턴스 변수를 사용하기 때문이다.

 

• 종속함수: 한 함수가 다른 함수를 호출

    → 두 함수는 세로로 가까이 배치한다

    → 가능하면 호출되는 함수를 호출하는 함수보다 뒤에 배치한다.

class WikiPageResponder
{
public:
    Response makeResponse(FitNesseContext context, Request request)
    {
        string pageName = getPageNameOrDefault (request, "FrontPage");
        loadPage(pageName, context);
        if (page == nullptr)
            return notFoundResponse(context, request);
        else
            return makePageResponse(context);
    }

    string getPageNameOrDefault(Request request, string defaultPageName)
    {
        string pageName = request.getResource();
        if (StringUtil::isBlank(pageName))
            pageName = defaultPageName;


        return pageName;
    }


    void loadPage(string resource, FitNesseContext context)
    {
        WikiPagePath path = PathParser.parse(resource);
        crawler = context.root.getPageCrawler();
        crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler());
        page = crawler.getPage(context.root, path);
        if (page != nullptr)
            pageData = page.getData();
    }

    Response notFoundResponse(FitNesseContext context, Request request)
    {
        return NotFoundResponder().makeResponse(context,request);
    }

    SimpleResponse makePageResponse(FitNesseContext context)
    {
        pageTitle = PathParser.render(crawler.getFullPath(page));
        string html = makeHtml(context);
        SimpleResponse response;
        response.setMaxAge(0);
        response.setContent(html);
        return response;
    }

    protected:
        WikiPage page;
        PageData pageData
        string pageTitle;
        Request request;
        PageCrawler crawler;
};

 

 

✔️ 가로 형식 맞추기

    ex) 연산자 좌우 공백

 

✔️ 적당한 들여쓰기

    ex) 가장 긴 변수랑 맞추기 위한 불필요한 정렬은 피하자.

// [before]
context =                 context;
socket =                  s;
requestParsingTimeLimit = 10000;


// [after]
context = context;
socket = s;
requestParsingTimeLimit = 10000;

 

 

✔️ 빈 while 문이나 for 문은 가능한 한 피해야 되지만

     사용한다면 빈 블록을 들여 쓰고 괄호로 감싸라

while (TRUE)
{
    ;
}

 

 

📌 클린 코드(Clean Code)란?

 

클린 코드(Clean Code)란?

💻 클린 코드 (Clean Code)? • 프로그래밍을 모르는 사람도 한눈에 읽히는 코드 (가독성) • 다른 사람이 수정하기 쉬운 코드 • 한 가지 일에 집중하는 코드 • 중복이 적은 코드 • 테스트가

zoosso.tistory.com

반응형

'까망 동네 > 클린 코드' 카테고리의 다른 글

[클린코드] 객체와 자료구조  (0) 2022.07.19
[클린코드] 함수 Function  (0) 2022.07.18
[클린코드] 주석 Comment  (0) 2022.07.18
[클린코드] 의미 있는 이름  (0) 2022.07.17
클린 코드(Clean Code)란?  (0) 2022.07.17

댓글