클린코드와 리팩토링/클린코드

클린코드 - 의미있는 이름

infitry 2023. 7. 23. 14:13
반응형

본 글은 로버트 C. 마틴의 클린코드를 읽고 주관적인 생각을 적은 글입니다.

 

책을 읽어보니 코드를 작성할 때 의미 있는 이름이 얼마나 중요한지를 설명해주고 있었습니다.

해당 장을 읽고 중요하다고 생각되는 부분만 몇 가지 간추려봤습니다.

 

의도가 분명한 이름

나쁜 코드

public List<int[]> getThem() {
	List<int[]> list1 = new ArrayList<int[]>();
    for (int[] x : theList)
    	if (x[0] ==4)
        	list1.add(x);
    return list1;
}

 

해당 코드에서는  의미가 분명하지 않아 소스 코드를 파악하기 어렵습니다.

theList 에는 무엇이 들어있는가?

theList 에서 0번째 값이 어째서 중요한가?

값 4는 무슨 의미인가?

함수는 반환하는 리스트 list1을 어떻게 사용하는가?  등 소스코드만 봐서는 해당 함수를 유추하기 어렵습니다.

 

좋은 코드

public List<Cell> getFlaggedCells() {
	List<Cell> flaggedCells = new ArrayList<Cell>();
    for (Cell cell : gameBoard)
    	if (cell.isFlagged())
        	flaggedCells.add(cell);
    return flaggedCells;
}

단순히 이름만 고쳐도 해당 함수를 이해하기 쉬워집니다.

플래그가 지정된 셀들을 가져오는 함수구나, 셀에서 플래그가 지정된 셀들을 모아서 가져오는구나 와 같이 한 번에 코드가 잘 읽히게 됩니다.

발음하기 쉬운 이름

나쁜 코드

class DtaRcrd102 {
	private Date genymdhms;
    private Date modymhms;
    private final String pszqint = "102";
    /* ... */
}

genymdhms 변수는 "젠 와이 엠 디 에이취 엠 에스"로 발음하기 어렵고 만약 팀원과 해당 변수를 가지고 대화를 해야 한다면?

대화하기 힘듭니다.😅

 

좋은 코드 

class Customer {
	private Date generationTimestamp;
    private Date modificationTimestamp;
    private final String recordId = "102";
    /* ... */
}

변경된 generationTimestamp 변수는 발음하기 쉬워졌습니다. 더불어 의미를 파악하기도 쉽습니다.

검색하기 쉬운 이름

나쁜 코드

for (int j = 0; j < 34; j++) {
	s += (t[j] * 4) / 5;
}

4와 5는 의미도 파악하기 힘들고 소스 코드 내에서 검색 시 검색하기도 어렵습니다.

 

좋은 코드

int realDaysPerIdeaDay = 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;
}

4는 realDaysPerIdealDay로 5는  WORK_DAYS_PER_WEEK로 변경하여 어떤 변수인지도 의미도 파악하기 쉽고, 소스 코드 내에서 검색하기도 쉽습니다.

정리

클린 코드의미 있는 이름에 대해 몇 가지 예를 살펴봤는데요.

클린 코드 책에 대해서 부정적인 의견도 많지만 저는 그래도 일단은 한 번 읽어보는 게 좋다고 생각합니다.

읽고 실무에 적용하기 위해 노력을 해봐야 어떤 코드는 적용할만하고 어떤 코드는 뭔가 잘못되었는지 알 수 있는 것 같습니다.

워낙 주관적인 의견을 다루는 책이다 보니 모든 내용이 맞다고 볼 순 없는 것 같습니다. (저자도 주관적인 의견이니 의견은 언제나 환영한다고 되어있습니다.)😃

반응형