좋은 이름을 짓는데는 시간이 오래걸린다,
그러나 좋은 이름으로 절약하는 시간이 더 많다는 것을 기억하자.
// 변경 전
public List<int[]> getThem(){
List<int[]> list1 = new ArrayList<int[]>();
for(int[] x : theList) // theList에 무엇이 들었는가?
if(x[0] == 4) // theList의 0번째 값이 왜 중요한가? 값4는 무엇을 의미하나?
list1.add(x);
return list1;
}
/* 변경 1
- theList -> gameBoard
- 상태 값 상수로 변경
*/
public List<int[]> getFlaggedCells(){
List<int[]> flaggedCells = new ArrayList<int[]>();
for(int[] cell: gameBoard)
if(cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
/* 변경 2
- 각 칸을 Cell 클래스로 표현
- Cell 필드 값 flagged 확인 메서드로 변경
- 코드의 단순성은 변하지 않았다 그럼에도 코드는 더욱 명확해졌다.
- 단순히 이름만 고쳤을 뿐인데 함수가 하는 일을 이해하기 쉬워졌다.
*/
public List<Cell> getFlaggedCells(){
List<Cell> flaggedCells = new ArrayList<Cell>();
for(Cell cell: gameBoard)
if(cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
int hp = 3; // hp가 체력을 의미하는지,, 유닉스 플랫폼인지,, 헷갈린다
/*
- 실제 list가 아닌데 accountList라는 변수를 쓰지말자
- 물론 실제 컨테이너가 list라 할지라도 변수명에 타입 이름을 넣지 않는 편이 바람직하다
*/
/*
XYZControllerForEfficientHandlingOfStrings와
XYZControllerForEfficientStorageOfStrings는 겁나게 비슷해 구별하기 어렵다
*/
// info data 차이가 있나..
String productInfo;
String productData;
// 둘다 돈 아닌가
Long moneyAmount;
Long money;
// 변수명에 타입이 들어가면 타입이 변경되어도 이름이 바뀌지않아 착오를 일으키기 쉽다
PhoneNumber phoneString;
// 인터페이스와 구현 클래스 둘중 하나를 인코딩한다면 구현 클래스
ShapeFactory // interface
ShapeFactorImpl // 구현 클래스
// 클래스 이름은 명사나 명사구가 적합
Customer customer;
WikiPage wikiPage;
Account account;
// 메서드 이름은 동사나 동사구가 적합
String name = employee.getName();
paycheck.isPosted()
변수에 타입이름을 넣는다거나, 단순히 tmp라는 변수를 사용한다거나, get과 retreieve를 같이쓰는 등의 실수를 많이 범한 나여서 2장은 특히 주의 깊게 봤다.. 이후 개발에서는 이런 실수는 줄여야겠다