본문 바로가기

Book Review/Clean Code

클린 코드 2장 정리 #1

  1. 의도를 분명히 밝혀라
    • 각 이름은 존재 이유, 수행 기능, 사용 방법에 대한 질문에 모두 답해야한다. 따로 주석이 필요하다면 의도르루 분명히 드러내지 못했다는 말이다.
    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;
}

 

  1. 그릇된 정보를 피하라
    • 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다. 이렇게 변수명을 지으면 그릇된 정보를 제공하는 것이다.
  2. 의미있게 구분하라
    • 연속적인 숫자를 덧붙인 이름 a1, a2, aN은 의도적인 이름과 정 반대이다. 이런 이름은 저자 의도가 전혀 드러나지 않는다.
    • GetActiveAccount(), getActiveAccounts(), getActiveAccountInfo() 이런 식으로 각 함수의 의미가 모호하게 변수명을 안짓는게 좋다.
  3. 발음하기 쉬운 이름을 사용하라
  4. 검색하기 쉬운 이름을 사용하라
    • 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다는 문제점이 존재한다.
    • 긴 이름은 짧은 이름보다 찾기가 용이하다
    • 이런 관점에서 이름 길이는 범위 크기에 비례 해야한다.
    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