우리는 소프트웨어를 만들면서 도처에서 이름을 짓는다.
이름을 잘 지으면 여러모로 편리하다.
이름을 잘 짓는 간단한 규칙을 알아보자.
변수, 함수, 클래스의 존재 이유는? 수행 기능은? 사용 방법은?
따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4) list1.add(x);
return list1;
}
public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell);
return flaggedCells;
}
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged()) flaggedCells.add(cell);
return flaggedCells;
}
public static void copyChars(char a1[], char a2[]) {
for (int i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
}
public static void copyChars(char source[], char destination[]) {
for (int i = 0; i < source.length; i++) {
destination[i] = source[i];
}
}
연속적인 숫자를 덧붙이거나 불용어(noise word)를 추가하는 방식은 적절치 못하다.
읽는 사람이 차이를 알도록 이름을 지어라.
발음하기 어려운 단어는 토론하기도 어렵다.
프로그래밍은 사회 활동이기 때문에 발음하기 쉬운 이름은 중요하다.
문자 하나를 사용하는 이름과 상수는 쉽게 눈에 띄지 않는다는 문제점이 있다.
이런 관점에서 긴 이름이 짧은 이름보다 좋다.
인코딩한 이름은 거의가 발음하기 어려우며 오타가 생기기도 쉽다.
클래스와 함수가 점차 작아지는 추세와 IDE의 눈부신 발전이 이르면서 헝가리식 표기법이나 기타 인코딩 방식이 오히려 방해가 될 뿐이다.
클래스와 함수는 접두어가 필요없을 정도로 작아야 마땅하다.
인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을.
명료함이 최고.
전문가 프로그래머는 남들이 이해하는 코드를 내놓는다.
클래스 이름과 객체 이름은 명사가 적합하며, 동사는 사용하지 않는다.
메서드 이름은 동사가 적합하다.
생성자를 중복정의할 때는 정적 팩토리 메서드를 사용하고, 생성자 사용을 제한하려면 생성자를 private으로 선언한다.
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
Complex fulcrumPoint = new Complex(23.0);
특정 문화에서만 사용하는 농담은 피하고 의도를 분명하고 솔직하게 표현하라.
추상적인 개념 하나에 단어 하나를 선택하여 일관성 있는 어휘를 구사하자.
똑같은 메서드를 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.
한 단어를 두 가지 목적으로 사용하지 마라.
같은 맥락이 아니라면 다른 어휘를 사용해야 한다.
의미를 해독할 책임을 독자가 아니라 저자에게 둬야 한다.
코드를 읽을 사람도 프로그래머이므로 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다.
적절한 '프로그래머 용어'가 없다면 문제 영역에서 이름을 가져온다.
스스로 의미가 분명한 이름이 없는 경우가 많다.
그래서 '클래스, 함수, 이름' 공간에 넣어 맥락을 부여한다.
모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.
일반적으로 짧은 이름이 긴 이름보다. 단, 의미가 분명한 경우에 한해서다.
이름에 불필요한 맥락을 추가하지 않도록 주의한다.
좋은 이름을 선택하려면 설명 능력이 뛰어나야 하고 문화적인 배경이 같아야 한다.
여느 코드 개선 노력과 마찬가지로 이름 역시 개선하려는 노력을 중단해서는 안된다.
이 장에서 소개한 규칙 몇 개를 적용해 코드 가독성이 높아지는지 살펴보라.