이름에 의도를 분명히 밝혀라
변수나 함수 그리고 클래스 이름은 아래 질문에 모두 답할 수 있어야 한다.
- 변수(혹은 함수나 클래스)의 존재 이유는?
- 수행 기능은?
- 사용 방법은?
따로 주석이 필요하다면 의도를 분명히 드러내지 못한 것이다.
의미 있게 구분하라
연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다.
- info나 Data는 a, an, the와 마찬가지로 의미가 불분명한 용어이다.
- 불용어는 중복이다. 변수이름에 variable이라는 단어는 단언코 금물이다. 표 이름에 table이라는 단어도 마찬가지다.
'NameString' 이라는 변수가 'Name'보다 뭐가 다른가?
검색하기 쉬운 이름을 사용하라
변수 이름을 e, i 처럼 짧게 정의하면 IDE 검색 기능에서 해당 변수만을 찾기 어렵다. (대부분 문자에 i,e는 포함되어 있기 때문)
변수의 이름 길이는 범위 크기에 비례해야 한다.
- 반복문 같은 좁은 범위에서 쓰는 변수는 다른 곳에서 쓰일 일이 없기 때문에 i, e 처럼 짧은 이름으로 사용해도 상관 없다.
- 변수나 상수를 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다. ex) WORK_DAY_PER_WEEK
클래스 이름
클래스 이름에는 해당 클래스의 책임을 기술해야 한다.
클래스 이름과 객체 이름은 명사나 명사구가 적합하다.
Customer, WikiPage, Account, AddressParser 등이 좋은 예다. Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.
메서드 이름
메서드 이름은 동사나 동사구가 적합하다.
postPayment, deletePage, save 등이 좋은 예다.
접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.
string name = employee.getName();
customer.setName("mike");
if (paycheck.isPosted());
의미있는 맥락을 추가하라
스스로 의미가 분명한 이름이 없지는 않다. 하지만 대다수 이름은 그렇지 못하다.
그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.
예를 들어 firstName, lastName, street, houseNumber, city, state, zipcode 라는 변수가 있다.
변수를 훑어보면 주소라는 사실을 금방 알아챈다.
하지만 어느 메서드가 state라는 변수 하나만 사용한다면? 변수 state가 주소 일부라는 사실을 금방 알아챌 수 있을까?
addr라는 접두어를 추가해 addFirstName, addrLastName, addrState라 쓰면 맥락이 좀 더 분명해진다.
불필요한 맥락을 제거하라
'고급 휘발유 충전소'(Gas Station Deluxe)라는 애플리케이션을 짠다고 가정하자. 모든 클래스 이름을 GSD로 시작하겠다는 생각은 전혀 바람직하지 못하다.
이럴경우 IDE에서 G를 입력하고 자동 완성 키를 누르면 IDE는 모든 클래스를 열거한다. IDE는 개발자를 지원하는 도구다. IDE를 방해할 이유는 없다.
댓글