728x90
로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다.

의미가 명확한 이름을 사용하자

변수, 함수 또는 클래스의 목적과 의미를 명확하게 설명하는 이름을 선택하자

아래 코드는복잡한 코드도 아니지만 코드가 하는 일을 짐작하기 어렵다.

문제는 코드의 함축성에 있다. 다시 말해, 코드 맥락이 코드 자체에 명시적으로 드러나지 않기 때문이다.

public List<int[]> getThem() {
	List<int[]> list1 = new ArrayList<int[]>();

	for (int[] x : theList) 
		if (x[0] == 4)
			list1.add(x);
	return list1;
}

위 코드에는 아래와 같은 정보가 드러나지 않는다.

  1. theList에 무엇이 들어있는가?
  2. theList에서 0번째 값이 어째서 중요한가?
  3. 값 4는 무슨 의미인가?
  4. 함수가 반환하는 리스트 list1을 어떻게 사용하는가?

이 코드가 지뢰찾기 게임이라고 가정해보자.

함수 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다.

public List<int[]> getFlaggedCells() {
	List<Cell> flaggedCells = new ArrayList<int[]>();
	
	for (Cell cell : gameBoard)
		if (cell.isFlagged)
			flaggedCells.add(cell);
	return flaggedCells;
}

잘못된 정보를 피하라

  1. 여러 계정을 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않는다. 계정을 담는 컨테이너가 실제 List가 아니라면 프로그래머에게 잘못된 정보를 줄 수 있다.
  2. 서로 흡사한 이름을 사용하지 않도록 주의한다.
    • XYZControllerForEfficentHandlingOfStrings
    • XYZControllerForEfficientStorageOfStrings
  3. 이름으로 잘못된 정보를 제공하는 대표적인 예로 O와 l가 있다. l은 1처럼 보이고 O는 0처럼 보인다.
  4. int a = l; if (O == l) a = Ol; else 1 = 0l;

명확하게 구분하라

연속적인 숫자를 덧붙인 이름(a1, a2, …. , aN)은 아무런 정보를 제공하지 못하는 이름이다.

public static void copyChars(char a1[], char a2[]) }
	for (int i = 0; i < a1.length; i++) {
		a2[i] = a1[i];
	}
}

함수 인수 이름을 source와 destination으로 사용한다면 코드 읽기가 더 쉬울 것이다.

public static void copyChars(char source[], char destination[]) }
	for (int i = 0; i < a1.length; i++) {
		destination[i] = source[i];
	}
}

클래스 이름

클래스 이름과 객체 이름은 명사나 명사구가 적합하다.

Customer, WikiPage, Account, AddressParser 등이 좋은 예다. Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.

메서드 이름

메서드 이름은 동사나 동사구가 적합하다.

postPayment, deletePage, save 등이 좋은 예다. 접근자, 변경자, 조건자,는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.

String name = employee.getName();
customer.setName("chanbin");
if (paycheck.isPosted())...

생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다.

Complex fulcrumPoint = new Complex(23.0);

위 코드보다 아래의 코드가 명확하다.

Complex fulcrumPoint = Complex.FromRealNumber(23.0);
728x90
Cold Bean