반응형
✔️ 개념은 빈 행으로 분리
글에 문단이 있듯이 코드에도 빈 행으로 구분해주면 좋다.
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)
{
;
}
반응형
'까망 동네 > 클린 코드' 카테고리의 다른 글
[클린코드] 객체와 자료구조 (0) | 2022.07.19 |
---|---|
[클린코드] 함수 Function (0) | 2022.07.18 |
[클린코드] 주석 Comment (0) | 2022.07.18 |
[클린코드] 의미 있는 이름 (0) | 2022.07.17 |
클린 코드(Clean Code)란? (0) | 2022.07.17 |
댓글