- 의도를 분명히 밝혀라
- 각 이름은 존재 이유, 수행 기능, 사용 방법에 대한 질문에 모두 답해야한다. 따로 주석이 필요하다면 의도르루 분명히 드러내지 못했다는 말이다.
위 코드는 공백과 들여쓰지는 적당하지만, 코드가 하는일을 짐작하기 어렵다. 즉, 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다. 위 코드가 지뢰게임을 한다는걸 가정하에 코드 가독성을 향상시켜 보겠다.public List<int[]> getThem(){ List<int []> list1 = new ArrayLIst<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x): return list1 }
public List<int[]> getFlaggedCells(){
List<int []> flaggedCells = new ArrayLIst<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
코드의 단순성은 바뀌지 않았지만, 코드는 더욱 더 명확해졌다.int 배열을 사용하는 대신, 칸을 간단한 클래스로 만들고 isFlagged라는 좀 더 명시적인 함수를 사용해 FLAGGED라는 상수로 감췄다.
public List<Cell> getFlaggedCells(){
List<Cell> flaggedCells = new ArrayLIst<Cell>();
for (Cell cell: gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
- 그릇된 정보를 피하라
- 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다. 이렇게 변수명을 지으면 그릇된 정보를 제공하는 것이다.
- 의미있게 구분하라
- 연속적인 숫자를 덧붙인 이름 a1, a2, aN은 의도적인 이름과 정 반대이다. 이런 이름은 저자 의도가 전혀 드러나지 않는다.
- GetActiveAccount(), getActiveAccounts(), getActiveAccountInfo() 이런 식으로 각 함수의 의미가 모호하게 변수명을 안짓는게 좋다.
- 발음하기 쉬운 이름을 사용하라
- 검색하기 쉬운 이름을 사용하라
- 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다는 문제점이 존재한다.
- 긴 이름은 짧은 이름보다 찾기가 용이하다
- 이런 관점에서 이름 길이는 범위 크기에 비례 해야한다.
for(int j = 0; j < 34; j++{ s += (t[j]*4)/5; }
int realDaysPerIdealDay = 4; const int WORK_DAYS_PER_WEEK = 5; int sum = 0; for (int j = 0; j < NUMBER_OF_TASKS; j++){ int realTaskDays = taskEstimate[j] * realDaysIdealDay; int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK); sum += realTaskWeeks; }
- 위 코드에서 sum은 별로 유용하진 않으나, 최소한 검색은 가능하며 이름을 의미 있게 지으면 함수가 길어지나, WORK_DAYS_PER_WEEK를 상수에 사용하면 찾기가 편해진다.
'Book Review > Clean Code' 카테고리의 다른 글
클린코드 5장_형식 맞추기 (0) | 2022.09.06 |
---|---|
클린코드 4장_주석 (0) | 2022.08.30 |
클린 코드 3장 정리 #1 (0) | 2022.07.30 |
클린 코드 2장 정리 #2 (0) | 2022.07.29 |
클린 코드 1장 정리 (0) | 2022.07.28 |