클린코드 - 형식 맞추기
본 글은 클린코드 5장을 읽고 난 후 주관적인 생각입니다.
"은 탄환은 없다"라는 말처럼 항상 상황에 맞춰 생각을 한 번 더 하는 습관이 중요한 것 같습니다.
형식을 맞추는 목적
오랜 시간이 지나도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속해서 영향을 미칩니다.
때문에 너무 엄격하지 않은 어느정도 스타일과 규율은 필요하다고 생각합니다.
적절한 행 길이를 유지하라
대부분 500줄을 넘지않고 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다고 합니다.
개인적인 생각으로는 파일의 길이가 길어지는 건 하나의 클래스가 너무 많은 일을 하고 있을 때 그렇다고 생각합니다.
예를 들어 주문이라는 큰 상위개념이 있고 하위개념으로는 옵션, 가격, 주문상품 등이 있다고 했을 때
주문이라는 큰 개념으로 클래스를 만들어 해당 클래스에서 하위개념에서 할 수 있는 모든 책임을 처리하려 할 때
파일이 길어지는 경우를 종종 본 것 같습니다.
행 길이가 몇 만자가 넘어가면 IDE에서도 버벅거리는 현상도 발생하고, 가독성, 유지보수성이 너무 떨어지는 것 같습니다.
개념은 빈 행으로 분리하라
각 행은 수식이나 절을 나타내고, 일련의 행 묶음은 완결된 생각 하나를 표현합니다.
각 완결된 생각 하나를 구분지으면 좀 더 읽기 편해지는 것 같습니다.
예시로 다음과 같은 코드는 읽기 어렵지 않습니다.
public class BoldWidget {
public static final String A = "A";
public BoldWidget(ParentWidget parent, String text) throws Exception {
super(parent);
Matcher match = pattern.matcher(text);
match.find();
...
}
public render() throws Exception {
StringBuffer html = new StringBuffer("<b>");
html.append(childHtml()).append("</b>");
return html.toString();
}
}
하지만 빈 행을 사용하지 않는다면 다음과 같이 읽기 어려워집니다.
public class BoldWidget {
public static final String A = "A";
public BoldWidget(ParentWidget parent, String text) throws Exception {
super(parent);
Matcher match = pattern.matcher(text);
match.find(); ...}
public render() throws Exception {
StringBuffer html = new StringBuffer("<b>");
html.append(childHtml()).append("</b>");
return html.toString();
}
}
세로 밀집도
서로 밀집도는 연관성을 의미합니다.
서로 밀집한 코드 행은 세로로 가까이 놓여야 한다는 뜻입니다.
수직 거리
- 변수 선언
변수는 최대한 가까이 선언합니다. 사용하기 전에 선언하는 것이 좋습니다.
다만 인스턴스 변수는 클래스 맨 처음에 선언하는 것이 좋습니다.
- 종속함수
한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치합니다.
- 개념적 유사성
간단하게 말하면 비슷한(친화도가 높은) 함수끼리 모아놓거나, 종속되는 함수는 서로 가까이 배치해 놓는 게 좋습니다.
가로형식 맞추기
한 행의 가로는 각 팀원의 모니터 크기나 글꼴마다 다르겠지만 모든 팀원이 스크롤이 생기지 않도록 적절하게 선택하는 게 좋은 것 같습니다.
가로정렬
개인적으로는 정말 필요하지 않다고 생각합니다.
public Align() {
private String name;
private String alignStyle;
private Object object;
public Align(String name, Style style, Object target) {
this.name = name;
this.alginStyle = style;
this.object = target;
}
}
코드가 엉뚱한 부분을 강조해 진짜 의도가 가려집니다.
들여 쓰기
정말 중요하다고 생각합니다.
들여 쓰기의 유무에 따라 가독성은 천차만별이라고 생각합니다.
정말 간단한 if, for 문 같은 경우라도 들여 쓰기를 하는 것이 좋다고 생각합니다.
팀 규칙
프로그래머라면 각자 선호하는 규칙이 있으나 팀에 속한다면 팀 규칙을 따라야 한다고 생각합니다.
좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다고 합니다.
동일한 스타일의 소스 파일들로 이뤄진다면 좀 더 읽기 좋은 코드가 될 것 같습니다.