2020. 11. 3. 20:52

컴파일러나 인터프리터만 통과하려는 생각으로 코드를 구현하는 프로그래머는 스스로 문제를 일으킨다


예를 들어, 동일한 범위 안에서는 다른 두 개념에 같은 이름을 사용하지 못한다


그래서 프로그래머가 한쪽 이름을 마음대로 바꾸고픈 유혹에 빠진다


어떤 프로그래머는 철자를 살짝 바꿨다가 나중에 철자 오류를 고치는 순간 컴파일이 불가능한 상황에 빠진다


컴파일러를 통과할지라도 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다


이름이 달라져야 한다면 의미도 달라져야 한다


연속적인 숫자를 덧붙인 이름(a1, a2, ..., aN)은 의도적인 이름과 정반대다


이런 이름은 그릇된 정보를 제공하는 이름도 아니며, 아무런 정보를 제공하지 못하는 이름일 뿐이다



public static void copyChars(char a1[], char a2[]) {

    for(int i = 0; i < a1.length; ++i)

        a1[i] = a2[i];

    }

}


함수 인수 이름으로 source와 destination을 사용한다면 코드 읽기가 훨씬 더 쉬워진다



불용어를 추가한 이름 역시 아무런 정보도 제공하지 못한다


Product라는 클래스가 있다고 가정하자


다른 클래스를 ProductInfo 혹은 ProductData라 부른다면 개념을 구분하지 않은 채 이름만 달리한 경우다


Info나 Data는 a, an, the와 마찬가지로 의미가 불분명한 불용어다


요지는 zork라는 변수가 있다는 이유만으로 theZork라 이름지어서는 안된다는 말이다


불용어는 중복이다


변수 이름에 variable이라는 단어는 단연코 금물이다


표 이름에 table이라는 단어도 마찬가지다


NameString이 Name보다 뭐가 나은가?


Name이 부동 소수가 될 가능성이 있던가?


그렇다면 앞서 언급한 그릇된 정보를 피하라 규칙을 위반한다


Customer라는 클래스와 Customer Object라는 클래스를 발견했다면 차이를 알겠는가?


고객 급여 이력을 찾으려면 어느 클래스를 뒤져야 빠를까?


이와 같은 오류를 저지르는 애플리케이션이 있다


개발자를 보호하고자 이름을 바꿨으나 오류 형태는 정확히 다음과 같다


getActiveAccount( );


getActiveAccounts( );


getActiveAccountInfo( );



명확한 관례가 없다면 변수 moneyAmount는 money와 구분이 안 된다


custormerInfo는 custorer와, accountData는