의도가 분명히 밝혀라
int d; // 경과시간 (단위 : 날짜)
이름 d에는 아무 의미도 드러나지 않는다.
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
경과 시간이나 날짜라는 느낌을 표현하는 이름이 필요하다
그릇된 정보를 피하라
오해를 불러 일으키는 코드는 피하자
여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라는 명명을 하지 말자.
accountGroup, bunchOfAccounts, Accounts 등이 적절하다.
서로 비슷한 두 이름을 사용하는 것도 좋지 않다.
XYZControllerForEfficientHandlingOfString 과 XYZControllerForEfficientStorageOfString은 차이를 알아채기 어렵다.
의미 있게 구분하라
연속된 숫자를 덧붙이는 방식은 적절치 못하다.
//Bad Case
public static void copyChar(char a1[], char a2[])
{
//Do Something
}
//Good Case
public static void copyChar(char source[], char destination[])
{
//Do Something
}
Product라는 클래스가 있다면, ProductInfo 나 ProductData 라는 클래스는 무슨 역할을 하는지 불분명하다.
Name과 NameString, Customer와 CustomerObject 역시 마찬가지다.
getActiveAccount(), getActiveAccounts(), getActiveAccountInfo() 또한 차이를 알 수 없다.
발음하기 쉬운 이름을 사용하라
genymdhms (generate date, year, month, day, hour, minute, second)라는 이름은 발음하기 너무 어렵다.
generationTimestamp가 적절하다.
검색하기 쉬운 이름을 사용하라
문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다.
5대신 WORK_DAYS_PER_WEEK을 사용하자.
인코딩을 피하라
헝가리안 표기법은 예전에 컴파일러가 타입을 점검하지 않을 때 쓰던 방식.
멤버 변수에 m_ 접두어를 붙일 필요도 없다.
클래스 이름
클래스와 객체 이름은 명사/명사구가 적합하다.
Customer, WikiPage, AddressParser 등이 좋은 예이다.
Manager, Processor, Data, Info 등과 같은 단어는 피하고 동사는 사용하지 말자.
메서드 이름
동사나 동사구가 적합하다.
PostPayment, DeletePage, Save 등이 좋다.
한 개념에 한 단어를 사용하라
똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.
마찬가지로 동일 코드 기반에 Controller, Manager, Driver를 섞어 쓰면 혼란스럽다.
해법 영역에서 가져온 이름을 사용하라
코드를 읽을 사람도 프로그래머이다.
전산 용어, 알고리즘 이름, 패턴 이름 등을 사용해도 좋다.
JobQueue 등
의미있는 맥락을 추가하라
firstName, lastNam, street, houseNumber, city, state, zipcode라는 변수가 있다.
주소와 관련되어 있다는 사실을 쉽게 알아 차릴 수 있지만, 어떤 메서드가 state라는 변수하나만 사용한다면 어렵다.
addr라는 접두어를 추가해서 맥락을 더 구분하기 쉽게 한다.
Address라는 클래스를 생성하면 더 좋다.
불필요한 맥락을 없애자
Gas Station Deluxe라는 어플리케이션을 짠다고 가정학, 모든 클래스이름을 GSD로 시작한다는 생각은 바람직하지 못하다.
IDE에서 G를 입력하고 자동완성을 하려면 모든 클래스를 열거 한다. IDE를 방해할 이유는 없다.