본문 바로가기
개발/개발론

클린 코드 - 2. 의미 있는 이름

by hongdor 2020. 12. 6.
728x90

출처 : 클린 코드(애자일 소프트웨어 장인 정신) - 로버트 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를 제거

 

 

 

728x90

'개발 > 개발론' 카테고리의 다른 글

테스트 주도 개발  (0) 2022.04.21
도메인 주도 설계 철저 입문  (0) 2022.04.07
클린 코드 - 3. 함수  (0) 2020.12.07
클린 코드 - 1. 깨끗한 코드  (0) 2020.12.06

댓글