2장) 의미있는 이름

의미있는 이름

의도를 분명히 밝혀라

  • 변수나 함수 그릭고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야한다
    • 존재 이유는? 수행 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내 못한것이다.

그릇된 정보를 피하라

  • 프로그래머는 코드에 그릇된 단서를 남겨서는 안된다.
  • 일관성이 떨어지는 표기법은 그릇된 정보다.

의미있게 구분하라

  • 컴파일러나 인터프리터만 통과하려는 생각으로 코드를 구현하는 프로그래머는 스스로 문제를 일으킨다
  • class를 사용했다고 klass를 사용하는 식의 수정은 피하자..
  • a1, a2, a3 등의 아무 의미 없는 이름은 저자의 의도가 드러나지 않는다
  • 불용어를 추가한 이름 역시 아무런 정보를 제공하지 못한다
    • ProdcutData 나 ProductInfo나 개념을 구분하지 않고 이름만 달리한경우
    • nameString이나 name이나 이름에 floatingPoint값이 올까봐 string을 명시??
  • 읽는 사람이 차이를 알도록 이름을 지어라

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

  • genymdhms modymdhms pszqint (발음은 커녕.. 의미가 짐작도 안간다..)

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

  • 이름 길이는 범위크기에 비례해야한다.
  • 상수를 쉽게 찾아내려면 final로 상수 정의하는 것이 검색에 용이하다

인코딩을 피하라

  • 새로운 개발자가 익힐 코드 양은 상당히 많다. 여기다 인코딩 언어까지 익히라는 요구는 비합리적이다.

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

  • 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야한다면 그 변수 이름은 바람직하지 못한다
  • 문자 하나만 사용하는 변수 이름은 문제가 있다. 루프에서 반복횟수를 변수 i, j, k는 괜찮다. 최악은 a와 b를 사용하므로 c를 선택한다는 논리다.
  • 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. 자신의 능력은 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.

클래스 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합하다. Manager, Processor, Data, Info등과 같은 단어는 피하고, 동사는 사용하지 않는다.

메소드 이름

  • 메소드 이름은 동사나 동사구가 적합하다

기발한 이름은 피하라

  • 재미난 이름보다 명료한 이름으로 선택하라
  • 특정 문화에서만 사용하는 농담은 피하는 편이 좋다(코딩은 진지하게)
  • 의도를 분명하고 솔직하게 표현하라

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

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다
    • 똑같은 메소드를 클래스 마다 제각각 부르면 혼란 스럽다( fetch, retrieve, get 등등)
  • 마찬가지로 controller, manager, driver를 섞어 스면 혼란스럽다
  • 이름이 다르면 클래스도 다르고 타입도 다르리라 생각하기에 혼란스럽다

말장난을 하지마라

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

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

  • 도메인 영역에서 이름을 가져 오는 정책은 현명하지 못하다.
  • 기술개념에는 기술 이름이 가장 적합한 선택이다

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

의미 있는 맥락을 추가하라

  • firstName, lastName, street, houseNumber, city, state라는 변수가 있을 때 이들 변수를 나열해서 훑어보면 “주소”와 연관이 있다는 것을 알지만 어떤 메서드는 state라는 변수 하나만 사용한다면 “이게 주소라는 정보의 일부일까” 라는 것을 금방 알아차리긴 힘들다
  • 해결 방법으로 addr라는 주소를 의미하기 위한 접두어를 추가한다 ex) addFirstName, addrLastName.. 등
  • 다른 해결 방법은 Address라는 클래스르 별도로 추가를 해 변수가 좀더 큰개념에 속한다는 것을 컴파일러에게도 분명하게 한다.

불필요한 맥락을 없애라

  • 고급 휘발유 충전소(Gas Station Deluxe)라는 Application을 만든다고 했을때 모든 클래스 이름에 GSD를 붙이는건 바람직하지 못하다
  • 일반저그올 짧은 이름보다는 긴 이름이 좋지만, 이것은 의미가 분명한 경우에 한해서이다 이름에 불필요한 맥락을 추가하지 않도록 주의한다.

마치면서

  • 좋은 이름을 선택하려면 설명 능력과 문화적인 배경이 같아야한다.
  • 이름을 바꾸지 않는건 다른 개발자가 반대할까봐 두려워서..
  • 코드를 짜는데 조금 더 집중해야한다
  • 결국 좋은 이름을 정하는건 클린코드에 큰 기여를 할뿐 -> 첫 단추를 잘 끼우자




© 2020. by Gaki

Powered by gaki