[Clean Code] 2. 의미 있는 이름

BBaeng·2023년 12월 17일
0

우리가 개발자로서 코드를 작성하든 함수를 짜든 모듈을 생성하든 이름을 잘 붙이는 것은 매우 중요한 일입니다.

2장에서는 이름을 잘 붙여 놓으면 왜 좋은지 그리고 이름을 잘 짓는 간단한 규칙을 소개해보겠습니다.

의도를 분명히 밝혀라

변수나 함수 그리고 클래스 이름은 굵직한 질문에 모두 답해야합니다.

  • 존재 이유
  • 수행 기능
  • 사용 방법

다음과 같은 내용들에 답변이 되지 않고 주석이 필요한 변수는 수정이 필요합니다.

다음은 변수의 예시입니다.

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

int daysSinceCreation;
int daysSinceModification;
  • 변수 d는 아무런 의미를 나타내지 못해 주석이 필요하기에 의도가 드러나지 못한 좋지 못한 변수 예시입니다.
  • 아래의 변수들 (daysSinceCreation, daysSinceModification) 경과시간 및 시점에 대한 기준과 측정하려는 값(단위)에 대한 정보가 잘 담겨 있어 의도가 잘 드러난 의미 있는 변수의 예시들 입니다.

다음은 변수말고도 함수에 대한 예시입니다.

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

// 2
public List<int []> getFlaggedCells() {
	List<int[]> flaggedCells = new ArrayList<int[]>();
    for (int [] cell : gameBoard)
    	if (cell[STATUS_VALUE} == FLAGGED)
        	flaggedCells.add(cell)
    return flaggedCells;
}
  • 1번의 코드와 2번의 코드의 단순함은 거의 동일합니다. 하지만 코드의 함축성에 있어서 큰 차이를 보입니다.
  • 1번의 경우 어떤 정보를 제공하는지 알 수 없습니다.
  • 2번의 코드는 다음의 명시적인 코드들을 통해 함수가 하는 일을 빠르게 이해할 수 있습니다.
    • FLAGGED : 깃발이 꽃힌 상태
    • gameBoard : 게임판

그릇된 정보를 피해라

그릇된 단서가 담겨있는 코드는 그 코드의 의미를 흐리기에 프로그래머들은 이러한 행위를 지양하도록 해야합니다.
다음과 같

  • 함부로 약어를 사용하지 않습니다.
  • 흡사한 이름을 사용하지 않도록 합니다.

의미 있게 구분하라

public static void copyCHars(char a1[], char a2[]) {
	for (int i = 0; i < a1.length; i++) {
    	a2[i] = a1[i];
    }
}
  • a1, a2 ... aN과 같이 연속적인 숫자를 덧붙이거나 불용어 를 사용한 이름은 그릇된 정보를 제공하지 않으면서 아무런 정보도 제공하지 않습니다. 즉, 의도를 전혀 드러내지 않습니다.

발음하기 쉬운 이름을 사용하라

  1. 절약하는 시간이 많아진다.
    • 좋은 이름을 지으려면 시간이 엄청 걸립니다. 하지만

0개의 댓글