소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 짓는 것만으로도 코드의 가독성이 많이 향상될 수 있다.
의도를 분명히 밝혀라
- 아무 의미 없는 이름은 짓지 말아야 한다
- 자료구조에도 그 쓰임을 이해할 수 있도록 이름을 지어야 한다
- 주석 없이 이해할 수 있는 이름을 지어라
int d; // 경과 시간(단위: 날짜)
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
그릇된 정보를 피하라
- 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해선 안된다
- 서로 흡사한 이름을 사용하지 않도록 주의한다
- 유사한 개념은 유사한 표기법을 사용한다
- 일관성이 떨어지는 표기법을 갖지 않도록 한다
의미 있게 구분하라
- 불용어(noise word)를 추가하는 방식은 적절하지 못하다
- name, nameString : name이 부동소수가 될 가능성은 없기에 nameString은 적절하지 못한 이름이다
- 변수 이름에
variable
- 클래스 이름에
Object
: Customer 클래스와 CustomerObject 클래스의 차이를 이름으로 유추할 수 없다 - getActiveAccount(), getActiveAccounts(), getAcctiveAccountInfo() 메서드의 차이를 이름으로 유추할 수 없다
- 읽는 사람이 차이를 알도록 이름을 지어야 한다
발음하기 쉬운 이름을 사용하라
- 토론을 위해서라도 발음하기 쉬운 이름이 더 좋다
// '젠 와이 엠 디 에이치 엠 에스'
// '젠 야 무다 힘즈' (쓰인대로 발음 시)
private Date genymdhms;
// 올바른 영어 단어로 조합
private Date generationTimestamp;
검색하기 쉬운 이름을 사용하라
- 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다
- final static 상수로 선언한다면 검색으로 찾아내기 쉽다
- 이름 길이를 범위 크기에 비례하도록 지어야 한다
- 여러 코드에서 사용한다면 더 검색하기 쉬운 이름을 지어야 한다
인코딩을 피하라
헝가리식 표기법
- 헝가리식 표기법은 이름에 접두어를 붙여 타입을 지정하는 기법이다.
- 자바는 변수 이름에 타입을 인코딩할 필요가 없기에 사용하지 말자
멤버 변수 접두어
- 멤버 변수에 m_ 접두어를 붙이지 말자
인터페이스 클래스와 구현 클래스
- AbstractFactory 구현에서 인터페이스와 구체 클래스의 명명에 접두어
I
를 붙이지 말자 - 둘 중 하나를 인코딩 해야한다면 구현 클래스 이름을 인코딩 하며 접두어
C
또는 접미사Imp
를 붙이자 (접미사Imp
를 더 많이 사용한다)
자신의 기억력을 자랑하지 마라
- 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 못하다
- 명료함이 최고다
클래스 이름 & 메서드 이름
- 클래스 이름과 객체 이름은 명사나 명사구가 적합하다
- Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다
- 메서드 이름은 동사나 동사구가 적합하다
- javabean 표준에 따라 get, set, is를 붙이자
- 생성자를 중복정의 해야한다면 정적 팩토리 메서드를 사용한다
기발한 이름은 피하라
- 재미난 이름보다 명료한 이름을 선택하라
한 개념에 한 단어를 사용하라
- 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다
- 일관성있는 언어 코드를 사용하라
말장난을 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 마라
해법 영역에서 가져온 이름을 사용하라
- 코드를 읽을 사람도 프로그래머이다
- 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어를 사용해도 괜찮다
문제 영역에서 가져온 이름을 사용하라
- '적절한 프로그래밍 용어가 없다'면 문제 영역에서 이름을 가져온다
- 단, 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다
의미 있는 맥락을 추가하라
- 단순 의미를 가진 이름 보다 맥락에 맞는 이름을 짓는것이 좋다
불필요한 맥락을 없애라
- 애플리케이션 이름이 ABC라고 해서 모든 클래스 이름을 ABC로 시작하도록 하면 안된다
- 이름에 불필요한 맥락을 추가하지 않도록 주의한다