일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 연신내
- 연신내데이트
- 라라벨
- kafka기본개념
- CleanCode
- clean code 형식맞추기
- 연신내맛집
- 압구정로데오맛집
- Apache Kafka
- 아파치카프카
- 방아머리해수욕장
- 양양
- kafka개념
- 카프카
- 청담맛집
- 아파치카프카 왜 만들어졌나
- 카프카개념
- cleancode형식맞추기
- 라라벨시작
- laravel
- clean code
- react
- 강아지와여행
- clean code 5장
- 압구정맛집
- 클린코더
- 강원도여행
- 클린코더요약
- 을지로맛집
- Kafka
- Today
- Total
BOHYUN STORY
[Clean Code] 5장. 형식 맞추기 본문
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다.
코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.
형식을 맞추는 목적
코드 형식은 너무 중요하다!
코드 형식은 의사소통의 일환이다.
의사소통은 전문 개발자의 일차적인 의무다.
오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.
적절한 행 길이를 유지하라
- 신문 기사처럼 작성하라!
: 아래로 내려갈 수록 의도를 세세하게 표현한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
- 개념은 빈 행으로 분리하라
: 빈 행은 새로운 개념을 시작한다는 시각적 단서다.
- 세로 밀집도
: 서로 밀접한 코드 행은 세로로 가까이 놓는다.
- 수직 거리
: 서로 밀접한 개념은 한 파일에 속해야 마땅하다.
: 변수 선언 > 변수는 사용하는 위치에 최대한 가까이 선언한다.
: 인스턴스 변수 > 클래스 맨 처음에 선언한다.
: 종속 함수 > 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
: 개념적 유사성, 친화도가 높을수록 코드를 가까이 배치한다.
- 세로 순서
: 일반적으로 함수 호출 종속성은 아래 방향으로 유지한다.
: 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
가로 형식 맞추기
- 개인적으로 120자 정도의 행 길이를 제한한다.
- 가로 공백과 밀집도
: 가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.
: 밀접도가 낮으면 공백으로 표시해준다.
- 가로 정렬
: 가로 정렬은 유용하지 않다.
- 들여쓰기
: 범위로 이루어진 계층을 표현하기 위해 코드를 들여쓴다.
: 짧은 함수에서도 들여쓰기로 범위를 제대로 표현한다.
[밥 아저씨의 형식 규칙] - 구현 표준 문서 예시
public class CodeAnalyzer implements JavaFileAnalysis {
private int lineCount;
private int maxLineWidth;
private int widestLineNumber;
private LineWidthHistogram lineWidthHistogram;
private int totalChars;
public CodeAnalyzer() {
lineWidthHistogram = new LineWidthHistogram();
}
public static List<File> findJavaFiles(File parentDirectory) {
List<File> files = new ArrayList<File>();
findJavaFiles(parentDirectory, files);
return files;
}
private static void findJavaFiles(File parentDirectory, List<File> files) {
for (File file : parentDirectory.listFiles()) {
if (file.getName().endsWith(".java"))
files.add(file);
else if (file.isDirectory())
findJavaFiles(file, files);
}
}
public void analyzeFile(File javaFile) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(javaFile));
String line;
while ((line = br.readLine()) != null)
measureLine(line);
}
private void measureLine(String line) {
lineCount++;
int lineSize = line.length();
totalChars += lineSize;
lineWidthHistogram.addLine(lineSize, lineCount);
recordWidestLine(lineSize);
}
private void recordWidestLine(int lineSize) {
if (lineSize > maxLineWidth) {
maxLineWidth = lineSize;
widestLineNumber = lineCount;
}
}
public int getLineCount() {
return lineCount;
}
public int getMaxLineWidth() {
return maxLineWidth;
}
public int getWidestLineNumber() {
return widestLineNumber;
}
public LineWidthHistogram getLineWidthHistogram() {
return lineWidthHistogram;
}
public double getMeanLineWidth() {
return (double)totalChars/lineCount;
}
public int getMedianLineWidth() {
Integer[] sortedWidths = getSortedWidths();
int cumulativeLineCount = 0;
for (int width : sortedWidths) {
cumulativeLineCount += lineCountForWidth(width);
if (cumulativeLineCount > lineCount/2)
return width;
}
throw new Error("Cannot get here");
}
private int lineCountForWidth(int width) {
return lineWidthHistogram.getLinesforWidth(width).size();
}
private Integer[] getSortedWidths() {
Set<Integer> widths = lineWidthHistogram.getWidths();
Integer[] sortedWidths = (widths.toArray(new Integer[0]));
Arrays.sort(sortedWidths);
return sortedWidths;
}
}
// Added to get code to build
interface JavaFileAnalysis {}
class LineWidthHistogram {
public void addLine(int lineSize, int lineCount) {
//TODO: Auto-generated
}
public Attributes getLinesforWidth(int width) {
return null; //TODO: Auto-generated
}
public Set<Integer> getWidths() {
return null; //TODO: Auto-generated
}
}
'IT > 기타' 카테고리의 다른 글
[Clean Code] 4장. 주석 (0) | 2021.07.11 |
---|---|
[Clean Code] 3장. 함수 (0) | 2021.06.30 |
[Clean Code] 2장. 의미있는 이름 (0) | 2021.02.13 |
[Clean Code] 1장. 깨끗한 코드 (0) | 2021.02.11 |
Clipy(macOS) , Ditto(window) / 개발 필수 앱 멀티 클립보드 (2) | 2020.07.05 |