CLEAN CODE

CLEAN 코드 네이밍 ( 1 )

1. 의도를 분명하게 밝히자

좋은 이름을 짓는 시간보다 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 

int d // 시간

int elaspedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

 

이름 d보다는 아래 elaspedTimeInDays 처럼 의도가 드러날 수 있도록 이름을 짓는 게 좋다.

 

또한 알고리즘을 만들때도,

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<Cell> getFlaggedCells(){
	List<Cell> flaggedCells = new ArrayList<Cell>();
    for(Cell cell : gameBoard)
    	if(cell.isFlagged())
        	flaggedCells.add(cell);
    return flaggedCells;
 }

위의 코드처럼 '아! 이 코드는 셀이 많은 보드에서 깃발(flag)을 찾는 게임이구나'라고 느낄 수 있도록 해줘야 한다.

 


2. 그릇된 정보를 피하자

 

프로그래머는 코드에 코드 의미를 흐릴 수 있는 그릇된 단서를 남기면 안 된다.

ex) 

hypotenuse ( 빗변 )을 나타내기 위해 hp를 사용한다.

계정 그룹을 사용하기 위해 accountList를 사용한다. ( List는 프로그래머에게 특별한 의미를 갖고 있다. - accountGroup 사용 )

흡사한 이름을 사용하지 말자 ( XYZControllerForEfficientHandlingOfStrings <> XYZControllerForEfficientStorageOfStrings)

숫자 1, 0과 헷갈리는 l (엘), O(오) 사용 

 


3. 의미 있게 구분하자

연속된 숫자를 덧붙이거나 의미가 불분명한 불용어(Info, Data, a, an, the, variable)를 추가하지 말자

만약 의미가 불분명하게 아래와 같이 메소드를 만들었다고 하면, 

getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();

전혀 구분하지 못할 것이다.

 


4. 발음하기 쉬운 이름을 사용하자

프로그래밍은 어떻게 보면 하나의 사회 활동이다. 그렇기 때문에 코드를 보는 사람들이 잘 읽을 수 있도록 발음하기 쉽게 짓자.

class DtaRcrd102{
	private Date genymdhms; // 젠?디?니?므드흐므스?
    private Date modymdhms; // 
    private final String pszqint = "102";
}

<>

class Customer{
	private Date generationTimestamp; // 제네레이션 타임스탬프!
    private Date modificationTimestamp;
    private final String recordId = "102";
}

 


5. 검색하기 쉬운 이름을 사용하자

문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다.

ex )

숫자로만 이름이 지어진 경우 ( 7.... )

알파벳 하나로만 이름이 지어진 경우 ( a... 특히 e는 영어에서 가장 많이 쓰이는 문자로서 검색하기 어렵다 )

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] * realDaysPerIdealDay;
    int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
    sum += realTaskWeeks;
}
//아 무슨 뜻인지도 알겠고, 검색하기도 쉽겠네?

 

 

참고 : Clean Code ( 로버트 C. 마틴 )

 

반응형

'CLEAN CODE' 카테고리의 다른 글

CLEAN 함수 (3)  (0) 2021.06.01
CLEAN 함수 (2)  (0) 2021.06.01
스위치 문 리팩토링( Refactoring Switch statement )  (0) 2021.05.27
CLEAN 함수 (1)  (0) 2021.05.25
CLEAN 코드 네이밍 (2)  (0) 2021.05.24