출처 : 클린 코드(애자일 소프트웨어 장인 정신) - 로버트 C.마틴 지음/ 박재호, 이해영 옮김
주관적으로 정리한 내용이며 생략된 내용도 있습니다.
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;
}
2. 그릇된 정보를 피하라
(1) 자료형이 List가 아닌데 List 이름이 붙는경우
3. 의미있게 구분하라( 2번과 연결 )
(1) Data와 Info 처럼 모호한 구분 No
(2) a와 the 처럼 불필요한 용어 제거
(3) 유사한 이름의 함수들 No
Ex)
getActiveAccount();
getActiveAccounts();
4. 발음하기 쉬운 이름을 사용하라
(1) genymdhms 와 modymdhms 를 generationTimestamp 와 modificationTimestamp 로 바꾼다.
> 일반적으로 함축된 짧은 이름보다 풀어 쓴 긴 이름이 좋다.
5. 검색하기 쉬운 이름을 사용하라
> 어떤 숫자나 문자가 의미를 가질 경우 이름을 지어준다. 그럼 검색과 이해가 쉬워진다.
** 전
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 realTestWeeks = ( realTaskDays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
>> 5보다는 WORK_DAYS_PER_WEEK 가 찾기 더 쉬울 것이다.
6. 명명 규칙
(1) 클래스 이름 : 명사 또는 명사구
(2) 메서드 이름 : 동사 또는 동사구
(3) 메소드에서 접근자는 get, 변경자는 set, 조건자는 is를 붙인다.
7. 한 개념에 한단어를 사용하라.
> controller, manager, driver 처럼 비슷한 용어를 섞어 쓰지마라
> 기존 add 관련 모든 메서드가 기존값 두 개를 더하는 것이라면
새로운 값 하나를 추가하는 메서드에 append를 사용하는 것은 괜찮다.
8. 의미 있는 맥락을 추가하라
> 클래수, 함수 등 어떤 NameSpace 안에서의 변수는 맥락을 통해 의미가 파악된다.
Ex) Address Class 속 city, street, state 라는 변수
> 변수에 addr을 붙일경우 좀더 명확해 지기도 한다. addrCity, addrStreet, addrState
**전
private void printGuessStatistics(char candidate, int count){
String number, verb, pluralModifier;
if( count == 0 ){...}
else if( count == 0 ){...}
else{...}
String guessMessage = String.format( "There %s %s %s%s", verb, number, candidate, pluralModifier );
print(guessMessage);
}
**후
public class GuessStatisticsMessage{
private String number, verb, pluralModifier;
public String make(char candidate, int count){
createPluralDependentMessageParts(count);
return String.format( "There %s %s %s%s", verb, number, candidate, pluralModifier );
}
.... 상세 함수들
}
>> 0. ...은 충분히 긴 함수들이다.
>> 1. GuessStatisticsMessage 이름의 클래스를 만들어 맥락을 분명하게함
>> 2. make 함수가 처음에 나옴으로써 3개의 변수들이 메세지 생성에 사용되는 변수임을 확실하게 했다.
9. 불필요한 맥락을 없애라.
> 고급 휘발유 충전소(Gas Station Deluxe) 클래스 안 모든변수 앞에 GSD가 붙는 경우 GSD를 제거
'개발 > 개발론' 카테고리의 다른 글
테스트 주도 개발 (0) | 2022.04.21 |
---|---|
도메인 주도 설계 철저 입문 (0) | 2022.04.07 |
클린 코드 - 3. 함수 (0) | 2020.12.07 |
클린 코드 - 1. 깨끗한 코드 (0) | 2020.12.06 |
댓글