[클린코드]2장. 의미있는 이름
2024-08-01
  • 의도를 분명히 밝혀라

    • 의도가 분명한 이름을 사용하면 코드가 명확해진다.

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

      아래의 코드가 훨씬 명확하게 읽기 쉽다. (list1이 어떤 값을 담는지, theList가 무엇인지, 4의 의미가 무엇인지 명확함)

  • 그릇된 정보를 피하라

    • 널리 쓰이는 단어를 다른 의미로 사용하지 마라
    • 실제 List 타입이 아니라면 변수에 List를 넣지 마라(accountList -> accountGroup, bunchOfAccounts, accounts)
    • 비슷한 이름을 사용하지 않도록 주의해라
    • 유사한 개념은 유사한 표기법을 사용한다(자동완성 기능을 사용할 때 유용해짐)
    • 소문자 L이나 대문자 O를 변수명으로 사용하지 마라(숫자 1, 0과 헷갈림)
  • 의미있게 구분하라

    • 다른 두 개념에 같은 이름을 사용하기 위해 숫자를 덧붙인다던가 불용어를 추가하지 마라(a1, a2, a3... / ProductInfo, ProductData)
      • Info, Data는 의미가 불분명한 불용어이다.
      • NameString -> Name : Name이 부동소수가 될 일이 없다.
      • customer, customerInfo / account, accountData / theMessage, message 는 의미의 구분이 어렵다. 읽는 사람이 차이를 알도록 이름을 지어라.
  • 발음하기 쉬운 이름을 지어라

    • 약자 말고 되도록 단어로
  • 검색하기 쉬운 이름을 사용해라

    • 문자 하나를 사용하는 이름과 상수는 검색이 힘들다. 여러 곳에서 사용할수록 검색에 쉬운 이름을 사용해라
  • 인코딩을 피하라

    • 헝가리식 표기법: 타입을 변수명에 포함하는 표기법인데, 언어와 IDE의 발전으로 현재는 필요가 없다.
    • 인터페이스 클래스와 구현 클래스 인코딩이 필요한 경우이다. 인터페이스 클래스는 ShapeFactory, 구현 클래스는 ShapeFactoryImp로 구현 클래스를 인코딩한다.
  • 클래스, 객체 이름: 명사나 명사구

  • 메서드 이름: 동사나 동사구

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

      Complex fulcrumPoint = new Complex(23.0);
      Complex fulcrumPoint = Complex.FromRealNumber(23.0); // 이 코드가 더 좋다.(생성자는 private으로 선언하여 사용을 제한할 수 있음)
    
  • 기발한 이름은 피해라

    • 특정 그룹, 문화권에서만 이해하는 이름, 농담은 피해라
  • 한 개념에 한 단어를 사용해라

    • 똑같은 개념을 사용할 때마다 다른 이름으로 사용하면 혼란스럽다. 일관된 단어를 사용해야 한다. (fetch, retrieve, get / controller, manager, driver)
  • 말장난 하지 마라

    • 한 단어를 두 가지 목적으로 사용하지 마라.
      • 두 값을 더하거나 이어서 하나의 값으로 만드는 메서드에 add라는 단어를 썼다면, 집합에 새로운 값을 추가하는 메서드는 add 대신 insert, append를 사용하는 것이 낫다.
  • 해법 영역에서 가져온 이름을 사용해라

    • 프로그래밍 관련 기술 개념 용어는 사용해도 좋다.
  • 문제 영역에서 가져온 이름을 사용해라.

    • 적절한 프로그래밍 용어가 없고, 문제 영역과 관련이 깊은 코드라면 문제 영역에서 사용하는 용어를 사용할 수 있다.
  • 의미 있는 맥락을 추가하라

    • firstName, lastName, street, houseNumber, city, state, zipcode 전체를 보면 주소에 대한 값인 것을 알 수 있지만 state 하나만 본다면 무엇을 의미하는 값인지 알 수 없다. 이런 경우 addr이라는 접두사를 추가하여 맥락을 좀 더 분명하게 할 수 있다.
  • 불필요한 맥락을 없애라

    • ABC라는 애플리케이션을 짠다고 모든 클래스 이름를 ABC로 시작하는 것은 바람직하지 못하다.

생각 정리

  • 변수 이름을 내가 의도한대로 잘 사용하려면 영어 단어 공부가 필수겠다.
  • 알고 있는 것도 있었지만 미처 생각하지 못했던 것도 있었다.
  • 내가 정한 이름이라도 내가 다 암기하고 있을 수 없기 때문에 처음부터 명확하고 의미있는 이름을 짓는 것이 중요하겠다.
  • 이름짓기는 프로젝트가 커지면 커질수록 더 중요할 것 같다.