처음 개발을 배우면서 한 현업자 분께서 개발자는 업무시간의 절반 이상이 이름을 짓는데 쓰인다고 말씀하신 적이 있다. 처음에는 농담인 줄 알았으나 개발을 하면 할 수록 좋은 이름이 무엇인가에 대해서 고민을 많이 하게 되었다. 아래의 법칙을 바탕으로 이름을 연습할 것이다.
존재이유, 수행 기능, 사용법 모두가 분명하게 들어나는 이름이어야 한다!
//이게 무슨 뜻인지는 아무도 모른다
int d;
// 확실히 무엇을 뜻하는지 알 수 있다
int daysSinceCreation
int fileAgeInDayse
서로 흡사한 이름이나, 다른 글자와 헷갈리게 이름을 짓지마라
// 2개의 차이점을 거의 찾을 수 없다
String XYZControllerForEfficientHandlingOfStrings
String XYZControllerForEfficientStorageOfStrings
// 유닉스 플랫폼 이름이기에 혼동된 정보를 줄 수 있다.
hp, aix, sco
// 숫자 0, 1 알파벳 O, l 구분이 쉽지 않다
0, 1 O,l
아무런 의미가 없거나, 유의미한 정보를 제공하지 못한다면 코드 읽기가 어려워진다
// a가 무엇을 뜻하는지 아무도 모른다
a1, a2, a3 ...
// 기능의 차이를 알 수 없다
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
두뇌는 말을 처리하는데 발달되어 있기에 발음이 되어야 이해하기 쉬워진다
// 두 번째가 의미있는 대화가 가능해진다.
class DtaRcrd102 {...}
class Customer {...}
문자 하나를 사용하는 이름과 상수는 쉽게 눈에 띄지 않는다
// 뜻으로 검색이 바로 가능하다
int MAX_CLASSES_PER_STUDENT
int 7
클래스와 객체 이름은 명사나 명사구가 적합하다
동사는 사용하지 않기!
// 좋은 예
Customer, WikiPage, Account, AddressParser
// 나쁜 예
Manager, Processor, Data, Info
매서드 이름은 동사나 동사구가 적합하다
postPayment, deletePage, save, getName
추상적인 개념 하나에 단어 하나를 선택한다
// 가져오다라는 뜻을 아래 중 하나만 선택
fetch, retrieve, get
// 관리라는 뜻을 아래 중 하나만 선택
controller, manager, driver
클래스, 함수 에 맥락을 부여해라
// 다 읽어봐야 주소 관련이라는 것을 안다
firstName, lastName, street, houseNumber, city, state, zipcode
// 의미있는 접두어를 추가하면 하나면 봐도 안다
addrFristName, addrLastName, AddrState