// 지뢰찾기 예시
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 ArrayLiist<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];
}
}
굳이 이름에 인코딩까지 할 필요는 없다.
문제 해결에 집중하는 개발자에게 인코딩은 불필요한 정신적 부담이다.
헝가리식 표기법(변수 및 함수의 인자 이름 앞에 데이터 타입을 명시하던 규칙)
멤버 변수 접두어(m_)
인터페이스 클래스와 구현 클래스 인코딩은 어떻게 하지
ShapeFactory - ShapeFactoryImp
동사나 동사구가 적합하다.
postPayment, deletePage, save emd
Accessor, Mutator, Predicate는 자바빈 표준에 따라 값 앞에 get, set, is를 붙인다.
생성자를 중복정의할 때는 정적 팩토리 메서드를 사용한다.
메서드는 인수를 설명하는 이름을 사용한다.
Complex fulcrumPoint = new Complex(23.0); // 인수를 직접 넣음
Complex fulcrumPoint = Complex.FromRealNumber(23.0); // 팩토리 메서드 사용하여 인수 넣음
적절한 '프로그래머 용어'가 없다면 문제 영역에서 이름을 가져온다.
해법 영역과 문제 영역을 구분할 줄 알아야 한다.
문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다.
좋은 이름을 선택하려면 설명 능력이 뛰어나야 하고 문화적인 배경이 같아야 한다. (이게 제일 어렵다고 한다...)
사람들이 이름을 바꾸지 않으려는 이유 하나는 다른 개발자가 반대할까 두려워서이다.
암기는 요즘 나오는 도구에게 맡기고, 우리는 문장이나 문단처럼 읽히는 코드 아니면, 적어도 표나 자료 구조처럼 읽히는 코드를 짜는 데만 집중해야 마땅하다.