티스토리 뷰

도서/클린 코드

의미 있는 이름

woo'^'chang 2022. 7. 5. 11:09

이번 장에서는 이름을 잘 짓는 간단한 규칙에 관해 설명하고 있습니다.

의도를 분명하게 밝혀라

필자는 의도가 분명한 이름이 정말로 중요하다는 사실을 거듭 강조하고 있습니다. 이러한 좋은 이름을 지으려면 시간 투자가 필요하지만 결국 투자한 시간만큼 시간을 절약할 수 있습니다. 또한 코드를 읽는 사람에게도 행복을 전해줄 수 있습니다.

 

변수, 함수, 클래스 이름은 아래의 질문에 답할 수 있어야 합니다.

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

기능적, 문법적으로 같은 코드를 작성했음에도 이름으로 인해 코드의 의도나 상태가 명확해질 수 있습니다.

public List<int[]> getAll() {
    List<int[]> lists = new ArrayList<int[]>();
    for (int[] theList : theLists) {
        if (theList[0] != 0) {
            lists.add(theList);
        }
    }
    return lists;
}

자바 문법을 알고 있다면 해당 코드의 동작은 이해할 수 있습니다. 하지만 무슨 의도를 가지고 코드를 작성했는지 알 수 있으신가요?

public List<int[]> getColorContainingRed() {
    List<int[]> colors = new ArrayList<int[]>();
    for (int[] color : palette) {
        if (color[RED] != 0) {
            colors.add(color);
        }
    }
    return colors;
}

그렇다면 이 코드는 어떠신가요? 저의 의도는 팔레트의 색상 RGBRED 값이 0이 아닌, 다시 말해서 빨간색을 포함하는 색의 리스트를 반환하도록 하는 것이었습니다. 단순히 이름만 고쳤을 뿐인데 함수가 하는 일을 이해하기 쉬워졌습니다. 이것이 바로 이름이 주는 가치입니다.

그릇된 정보를 피하라

잘못된 정보를 전달하는 이름을 작성하는 것은 물론, 널리 쓰이는 의미를 가진 단어를 사용하는 것도 피하라고 설명하고 있습니다. 또한 흡사한 형태를 가진 이름을 사용하지 않도록 주의해야 합니다.

 

그릇된 정보의 끔찍한 예로는 소문자 L이나 대문자 O변수입니다. 해당 변수들은 폰트에 따라 다르지만, 숫자 0, 1과 매우 비슷합니다. 필자는 이런 끔찍한 경우를 실제로 사용하는 곳을 보았고, 코드 변경보다는 폰트 변경을 해결책으로 제시했다고 합니다. (웃음 포인트)

의미 있게 구분하라

간혹 연속적인 숫자를 덧붙인 이름을 사용하곤 하는데 이는 의도적인 이름과는 정반대의 이름입니다. 의도를 전혀 설명하지 못하기 때문입니다. 컴파일러나 인터프리터를 통과하기 위해 적은 노력으로 이름을 지으려고 하지 말고 다른 사람이 봤을 때도 의도가 잘 드러나도록 이름을 구분해야 합니다.

Spring 프로젝트 중 제가 맡은 부분의 Dto 클래스들인데 생성 당시에는 의미가 잘 구분된다고 생각했으나 이 코드를 처음 본 사람의 입장으로 생각해봤을 때 MultiMemberResponseDtoOtherMemberInfoResult가 와닿지 않음을 느끼게 되었습니다. (이 책을 읽으면서 진행한 프로젝트의 리팩토링을 진행할 예정입니다)

 

결론은 읽는 사람이 차이를 알도록 이름을 지어야 한다는 것입니다.

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

사람들은 단어에 익숙하고 단어는 발음할 수 있습니다. 익숙한 단어를 잘 활용하기 위해 발음하기 쉬운 이름을 사용하라고 설명하고 있습니다.

검색하기 쉬운 이름을 사용하라

코드의 깊이가 깊어질수록 검색이 필요한데 이를 위해 검색하기 쉬운 이름으로 작성해야 합니다. 이는 생산성가독성을 높일 수 있는 방법 의 하나입니다.

 

이름의 길이는 범위 크기에 비례해야 합니다. 무조건 비례해야 하는 것이 아닌 작은 범위에서 사용되는 경우 비교적 간단하게 이름을 작성해도 괜찮다는 의미를 담고 있습니다.

인코딩을 피하라

인코딩한 이름은 거의 발음하기 어려우며 오타가 생기기도 쉽습니다. 타입을 이름에 포함하거나 접두어를 사용하는 것도 좋지 않은 명명법 중 하나입니다.

자신의 기억력을 자랑하지 마라

전문가 프로그래머는 명료함이 최고라는 사실을 이해하고 있습니다. 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 작성할 수 있어야 합니다.

클래스 이름과 메서드 이름

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

 

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

해법 영역에서 가져온 이름을 사용하라

작성한 코드를 읽는 사람 또한 프로그래머이기 때문에 기술 개념을 사용해도 좋습니다. 하지만 모든 이름을 문제 영역에서 가져오는 정책은 현명하지 못하기 때문에 신중하게 사용하도록 해야 합니다.

불필요한 맥락을 없애라

애플리케이션의 이름을 CWC라고 정했다고 하더라도 모든 클래스 이름에 CWC를 붙일 필요는 존재하지 않습니다. 그러한 불필요한 맥락보다는 이름이 길어지더라도 의미 있고 명확한 맥락을 이름에 담을 수 있도록 노력해야 합니다.

결론

저도 이름을 지을 때 명확하게 정해진 명명 규칙이 존재하지 않아 이름을 작성하는 데 있어 소극적인 모습을 보였습니다. 이러한 소극적인 모습은 변화시킬 수 없고 발전할 수 없다는 생각이 들었습니다.

 

내가 짠 코드는 또 다른 나의 얼굴이므로 이해하기 쉽도록 이름을 작성해 나가고자 합니다.

'도서 > 클린 코드' 카테고리의 다른 글

객체와 자료 구조  (0) 2022.07.12
형식 맞추기  (0) 2022.07.10
주석  (0) 2022.07.09
함수  (0) 2022.07.07
깨끗한 코드  (0) 2022.07.04
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday