의미있는 이름을 연구하자.

의미있는 이름을 연구하자.

소프트웨어에서 이름은 변수, 함수, 클래스, 패키지 등 모든 곳에서 사용되며 이름을 '**잘'**지을수록 여러모로 편하다.

개인적 감상평


2장은 좋은 이름을 짓기위한 팁들을 알려준다.

이는 이름자체가 로직에 영향을 주는게 아니기에 얼핏 무시할수도 있고, 처음에는 오히려 로직짜는것보다 이름짓는 것 때문에 시간을 더 쓰는일이 있어서 적당히 작성하고 넘어가는 일이 많았다. 하지만, 그 후폭풍으로 오랜만에 코드를 수정해야 하거나 다른 개발자에게 코드를 알려줄 때 나부터 이게 무슨함수였는지 기억이 잘 나지않아 헤맸던 기억이 있다.

하지만 정말 이름과 변수를 의미있게 잘지었다면 나한테 문의가 올 일 자체가 없지 않았을까싶다. 클린코드가 내 습관을 고치는 일환이지만 그 중 좋은 이름 짓기는 조금 더 밀접한 내 고질적인 안좋은 습관을 고치라는 충고같이 느껴진다.

1.의도가 분명한 이름을 지어라

: 이름만으로 해당 변수나 함수등의 목적을 알 수 있어야 한다. 한 번에 못알아보거나 주석을 읽어야지만 알아보는 이름은 좋은 이름이 아니다.

//worst case
int d; //경과 시간(단위: 날짜)

//good case
int daysSinceCreation;
//worst case
public List<int[]> getThem(){
	List<int[]> list1 = new ArrayList<int[]>();
	for(int[] x: theList){
		if(x[0]==4)
			list1.add(x);
	}
	return list1;
}

//normal case
public List<int[]> getFlaggedCells() {
	List<int[]> flaggedCells = new ArrayList<int[]>();
	for (int[] cell gameBoard)
		if (cell[STATUS VALUE] == FLAGGED)
		flaggedCells.add(cell);
	return flaggedCells;
}

//best case
public List<Cell> getFlaggedCells() {
	List<Cell> flaggedCells = new ArrayList<Cell>();
	for (Cell cell gameBoard)
		if (cell.isFlagged())
			flaggedCells.add(cell);
	return flaggedCells;
}

⇒ 둘 다 지뢰찾기 게임 예제 코드인데 worst case는 로직이 어렵진 않지만 무슨 메소드인지 내부의 변수가 무엇을 의미하는지 알 수가 없다.

2. 그릇된 정보를 피하라.