-
2장 의미있는 이름DevBook/CleanCode 2021. 6. 29. 15:44
1. 의도를 분명히 밝혀라
변수나 함수, 클래스 이름은 변수(혹은 함수나 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 이라는 물음에 모두 답해야 한다.
[예시]
1) 의도가 들어나지 않는 코드
public List<int[]> getThem(){ List<int[]> list1 = new ArrayList<int[]>(); for(int[] x : thisList) if(x[0] == 4) list1.add(x); return list1; }
위의 코드의 문제점 : 코드 맥락이 코드 자체에 명시적으로 드러나지 않음
2) 개선된 코드
public List<int[]> getFlaggedCells(){ List<int[]> flaggedCells = new ArrayList<int[]>(); for(int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; }
지뢰찾기 게임을 만든다고 가정하면, theList -> gameBoard(게임판), x -> cell(칸), [0] -> STATUS_VALUE(칸 상태), 4 -> FLAGGED(깃발이 꽂힌 상태) 이렇게 명시적으로 이름을 붙이는 것이 좋음
2. 그릇된 정보를 피하라
상황1) 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않음 -> 대신 accountGroup, bunchOfAccounts, Accounts로 명명함
3. 의미 있게 구분하라
상황1) 연속적인 숫자를 덧붙인 이름(a1, a2 , ...)는 아무런 정보를 제공하지 못하는 이름일 뿐임
public static void copyChars(char a1[], char a2[]){ for(int i = 0; i < a1.length; i++) a2[i] = a1[i]; }
개선 코드 : 함수 인수 이름을 source와 destination으로 사용하기
public static void copyChars(char source[], char destination[]){ for(int i = 0; i < source.length; i++) destination[i] = source[i]; }
4. 검색하기 쉬운 이름을 사용하라
문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다는 문제점이 있음
[예시]
1) 검색하기 어려운 코드
for(int j = 0; j < 34; j++){ s += (t[j]*4)/5; }
2) 개선된 코드
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; }
-> 1)의 코드에서 숫자로만 표현된 것을 분명한 변수 이름으로 설정해주어 검색이 편리해짐
5. 명료하게 표현하기
1) 클래스 이름
클래스 이름과 객체 이름은 명사나 명사구가 적합함
Customer, WikiPage, Account, AddressParser 등이 좋은 예시 <--> Manager, Processor, Data, Info 같은 단어는 피하고, 동사는 사용하지 않음
2) 메서드 이름
동사나 동사구가 적합함
postPayment, deletePage, save 등이 좋은 예시
느낀점
안 좋은 예시 코드가 내 코드여서 찔린다... 앞으로 유의하면서 짜야겠다..
대충 훑어봐도 이해할 코드를 작성하도록...