5장 형식 맞추기
생성일
2024년 2월 13일 오후 6:44
태그
비어 있음
형식을 맞추는 목적
코드 형식은 중요하다 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 맨 처음 잡아 놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다.
세로 형식
적절한 행 길이를 유지하기
200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다.
ALT
개념은 빈 행으로 분리하라
완결된 생각 하나를 일련의 행 묶음으로 표현하기
패키지 선언부, import 문 , 각 함수 사이에 빈행
세로 밀집도는 연관성을 의미한다.
클래스의 인스턴스끼리 가까이 놓기
수직 거리
변수는 사용하는 위치에 가까이 선언한다.
지역변수는 맨 처음에 선언한다.
인스턴스 변수는 클래스 맨 처음에 선언한다.
한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
호출하는 함수를 호출되는 함수보다 먼저 배치한다.
Java
복사
public class WikiPageResponder implements SecureResponder {
protected WikiPage page;
protected PageData pageData;
protected String pageTitle;
protected Request request;
protected PageCrawler crawler;
public Response makeResponse(FitNesseContext context, Request request) throws Exception {
String pageName = getPageNameOrDefault(request, "FrontPage");// 상수를 알아야 마땅한 함수에서 실제 사용하는 함수로 산수를 넘겨주는 방법이 좋음
loadPage(pageName, context);
if (page == null)
return notFoundResponse(context, request);
else
return makePageResponse(context);
}
private String getPageNameOrDefault(Request request, String defaultPageName) {
String pageName = request.getResource();
if (StringUtil.isBlank(pageName))
pageName = defaultPageName;
return pageName;
}
protected void loadPage(String resource, FitNesseContext context)
throws Exception {
WikiPagePath path = PathParser.parse(resource);
crawler = context.root.getPageCrawler();
crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler());
page = crawler.getPage(context.root, path);
if (page != null)
pageData = page.getData();
}
private Response notFoundResponse(FitNesseContext context, Request request)
throws Exception {
return new NotFoundResponder().makeResponse(context, request);
}
private SimpleResponse makePageResponse(FitNesseContext context)
throws Exception {
pageTitle = PathParser.render(crawler.getFullPath(page));
String html = makeHtml(context);
SimpleResponse response = new SimpleResponse();
response.setMaxAge(0);
response.setContent(html);
return response;
}
...
개념적 유사성
친화도가 높은 요인
한 함수가 다른 함수를 호출해 생기는 직접적인 종속성
변수와 그 변수를 사용하는 함수
비슷한 동작을 수행하는 일군의 함수
아래 코드는 명명법이 똑같고 기본 기능이 유사함
Java
복사
class Assert {
static public void assertTrue(String message, boolean condition) {
if (!condition)
fail(message);
}
static public void assertTrue(boolean condition) {
assertTrue(null, condition);
}
static public void assertFalse(String message, boolean condition) {
assertTrue(message, !condition);
}
static public void assertFalse(boolean condition) {
assertFalse(null, condition);
}
...
가로 형식
80자 이후부터 행 수는 급격하게 감소한다. 프로그래머는 명백하게 짧은 행을 선호한다.
120자 이하가 좋다.
가로 공백
공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.
할당 연사자 앞 뒤에는 공백을 준다.
함수 이름과 이어지는 괄호 사이에는 공백을 넣지 않는다.
함수와 인수는 서로 밀접하다.
연산자 우선순위를 강조하기 위해서 공백을 사용하지만 코드 형식을 자동으로 맞춰주는 대다수 도구는 이를 고려하지 않음
b*b - 4*a*c
가로 정렬
엉뚱한 부분을 강조해 진짜 의도가 가려지기 때문에 유용하지 않음
Java
복사
private Socket socket;
private InputStream input;
private OutputStream output;
private Reques request;
private Response response;
private FitNesseContex context;
protected long requestParsingTimeLimit;
private long requestProgress;
private long requestParsingDeadline;
private boolean hasError;
들여쓰기
범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓴다.
들여쓰기한 파일은 구조가 한눈에 들어온다.
간단한 if문 짧은 while문, 짧은 함수에서도 들여쓰기 규칙을 유지하기
팀 규칙
구현 스타일 논의
어디에 괄호를 넣은지
들여쓰기는 몇 자로 할지
클래스와 변수와 메서드 이름은 어떻게 지을지를 결정
→ 코드 형식기 설정
💡
네이버 코드 스타일
팀에 속한다면 팀 규칙을 따라야 한다.
'책 > Clean Code' 카테고리의 다른 글
[Clean Code] 11장 시스템 (0) | 2025.03.17 |
---|---|
[Clean Code] 9장 단위 테스트 (0) | 2025.03.17 |
[Clean Code] 7 장 오류 처리 (0) | 2025.03.17 |
[Clean Code] 3장 함수 (0) | 2024.01.30 |
[Clean Code] 1장 깨끗한 코드 (2) | 2024.01.30 |