2장 의미있는 이름

Seunghee Ryu·2023년 11월 27일
0

클린 코드

목록 보기
2/18

  • 좋은 이름을 짓기 위한 규칙을 알려준다

previous

  • 이름은 어디에서나 쓰이기 대문에 이름을 잘 지으면 여러모로 편하다

1. 의도를 분명하게 밝혀라

  • 변수나 함수, 클래스의 이름만으로 목적이나 존재 이유, 수행 기능, 사용 방법을 알 수 있어야 한다
// worst case
int d; //경과 시간(단위 : 날짜)

// good case
int daysSinceCreation;

2. 그릇된 정보를 피하라

  • 그릇된 단서를 줄 수 있는 이름은 사용하지 않는것이 좋다
public String getAccountList() {
       return "문자열“
}
  • 이처럼 getAccountList라고 명명하는 경우 컬렉션객체인 List 타입이 올거라고 추측하는데 실제로는 String 타입이 오게 되기 때문에 그릇된 단서를 주는 이름이 된다
  • 흡사한 이름을 사용하지 않도록 주의한다. 비슷한 이름을 사용하는 경우 실수할 가능성이 높아진다

3. 의미있게 구분하라

  • 읽는 사람이 차이를 알 수 있도록 이름을 지어야 한다
// worst case
public void copyChars(char a1[], char a2[]){
       for (int i = 0; i <a1.length; i++){
              a2[i] = a1[i];
       }
}

// good case
public void copyChars(char source[], char destination[]){
       for (int i = 0; i <source.length; i++){
              destination[i] = source[i];
       }
}
  • worst case와 good case를 비교해보면 전자보다 후자의 경우 인자의 의미와 목적을 알기 쉽다

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

  • 발음하기 어려운 축약어 및 이름은 다른 사람과의 의사 소통을 불편하게 한다

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

  • 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다
  • 검색하기 쉬운 이름을 사용하는 것이 좋다

6. 인코딩을 피하라

  • 변수에 타입 정보까지 포함하는 헝가리안 표기법은 유연성과 가독성이 떨어진다
  • 불필요한 접두어는 사용하지 않는 것이 좋다
  • 인코딩이 필요한 때도 있다
    - 인터페이스 클래스와 구현 클래스와 같은 경우 API인 인터페이스는 원형 그대로의 이름으로 작성하고 구현 클래스에서는 접두사나 접미사를 붙인다

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

  • 명료하고 남들이 이해하기 좋은 이름을 짓는 것이 좋다
  • 자신만이 아는 이름으로 정하여 의미와는 연관되지 않는 변수명을 사용하면 만든 사람조차 까먹을 가능성이 높으며 다른 사람이 코드를 수정할 때 문제가 발생할 가능성이 높다

8. 클래스명

  • 명사나 명사구를 사용한다

9. 메서드 이름

  • 동사나 동사구를 사용한다

10. 기발한 이름은 피하라

  • 자신만이 아는 유머나 농담, 혹은 특정 문화에서만 사용하는 농담을 사용하여 변수, 함수명을 짓지 말아야 한다
  • 재미있는 이름보다 명료한 이름을 선택해야 한다

11. 한 개념에 한 단어를 사용하라

  • 같은 개념을 제각각 다른 이름으로 부르지 말아야 한다
  • 일관성 있는 어휘는 생산성을 높일 수 있다

12. 한 단어를 두가지 목적으로 사용하지 마라

  • 일관성을 유지하기 위해서 한 개념에 한 단어를 사용하는 규칙을 그대로 따르지 않아도 된다
  • 코드는 해독하는 것이 아니라 대충 훑어봐도 이해할 수 있는 것이어야 한다

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

  • 코드를 읽을 사람도 프로그래머이기 때문에 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다. 하지만 모든 이름을 문제 영역domain에서 가져오는 것은 지양해야 한다
  • 잘 모르는 분야의 전공 언어는 사용하지 않는 것이 좋다

14. 문제 영역에서 가져온 이름을 사용하라

  • 해법 영역에 적절한 이름이 없다면 문제 영역에서 이름을 가져온다. 그러면 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있다

15. 의미있는 맥락을 추가하라

  • 클래스, 함수, 이름 공간에 맥락을 부여하고 그것이 불가능할 경우 마지막 수단으로 접두어를 붙인다

16. 불필요한 맥락을 없애자

  • 클래스에는 불필요한 맥락이 없도록 하자

감상

  • 이전 프로젝트는 네이밍 규칙이 없었기 때문에 이름을 마음대로 지을 수 있었다. 소스를 분석할 때 보면 이곳의 예제로 나와있는 것처럼 의도를 분명하기 알 수 없는 너무나도 짧은 변수명도 있었고 그릇된 정보가 포함되어 있어서 반환 타입이 헷갈리는 변수명도 있었다. 내 경우에도 목적이나 구분이 부정확한 변수명을 지어서 리뷰를 받았던 경험이 있다.
  • 함께 일을 했던 시니어 개발자 중에 실제로 타이핑을 하는 시간보다 앉아서 생각을 하는 시간이 많은 분이 계셨는데 그 분이 뭔가를 만들기 전에 생각을 많이 해보라는 말을 하신적이 있었다. 한 번 만들어진 것을 수정하는 것보다 잘 생각해보고 클래스명이나 변수명을 수정할 일이 없도록 하는 것이 더 낫다고 하셨던 것이 생각났다.
  • 이름 앞에 접두어가 붙는 것이 바람직하지 않다는 것에는 동감한다. 레거시를 유지보수하면서 본 적이 있는데 나중에는 앞에 붙은 접두어는 자동으로 생략한 채 보고 있었다.
  • 네이밍에 골머리를 앓는 편인데 앞으로는 명확한 기준을 세울 수 있어서 좀 더 수월하게 작명을 할 수 있을 것 같다

0개의 댓글