아카이빙/Clean Code

[CleanCode] 의미있는 이름

셩님 2018. 6. 28. 20:53

[CleanCode] 의미있는 이름

의도가 분명히 밝혀라

int d; // 경과시간 (단위 : 날짜)
  • 이름 d에는 아무 의미도 드러나지 않는다.

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
  • 경과 시간이나 날짜라는 느낌을 표현하는 이름이 필요하다


그릇된 정보를 피하라

  • 오해를 불러 일으키는 코드는 피하자

  • 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라는 명명을 하지 말자.

    • accountGroup, bunchOfAccounts, Accounts 등이 적절하다.

  • 서로 비슷한 두 이름을 사용하는 것도 좋지 않다.

    • XYZControllerForEfficientHandlingOfString 과 XYZControllerForEfficientStorageOfString은 차이를 알아채기 어렵다.


의미 있게 구분하라

  • 연속된 숫자를 덧붙이는 방식은 적절치 못하다.


//Bad Case
public static void copyChar(char a1[], char a2[])
{
  //Do Something
}

//Good Case
public static void copyChar(char source[], char destination[])
{
   //Do Something
}

  • Product라는 클래스가 있다면, ProductInfo 나 ProductData 라는 클래스는 무슨 역할을 하는지 불분명하다.

  • Name과 NameString, Customer와 CustomerObject 역시 마찬가지다.

  • getActiveAccount(), getActiveAccounts(), getActiveAccountInfo() 또한 차이를 알 수 없다.


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

  • genymdhms (generate date, year, month, day, hour, minute, second)라는 이름은 발음하기 너무 어렵다.

  • generationTimestamp가 적절하다.


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

  • 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다.

  • 5대신 WORK_DAYS_PER_WEEK을 사용하자.


인코딩을 피하라

  • 헝가리안 표기법은 예전에 컴파일러가 타입을 점검하지 않을 때 쓰던 방식.

  • 멤버 변수에 m_ 접두어를 붙일 필요도 없다.


클래스 이름

  • 클래스와 객체 이름은 명사/명사구가 적합하다.

  • Customer, WikiPage, AddressParser 등이 좋은 예이다.

  • Manager, Processor, Data, Info 등과 같은 단어는 피하고 동사는 사용하지 말자.


메서드 이름

  • 동사나 동사구가 적합하다.

  • PostPayment, DeletePage, Save 등이 좋다.


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

  • 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.

  • 마찬가지로 동일 코드 기반에 Controller, Manager, Driver를 섞어 쓰면 혼란스럽다.


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

  • 코드를 읽을 사람도 프로그래머이다.

  • 전산 용어, 알고리즘 이름, 패턴 이름 등을 사용해도 좋다.

  • JobQueue 등


의미있는 맥락을 추가하라

  • firstName, lastNam, street, houseNumber, city, state, zipcode라는 변수가 있다.

  • 주소와 관련되어 있다는 사실을 쉽게 알아 차릴 수 있지만, 어떤 메서드가 state라는 변수하나만 사용한다면 어렵다.

  • addr라는 접두어를 추가해서 맥락을 더 구분하기 쉽게 한다.

  • Address라는 클래스를 생성하면 더 좋다.


불필요한 맥락을 없애자

  • Gas Station Deluxe라는 어플리케이션을 짠다고 가정학, 모든 클래스이름을 GSD로 시작한다는 생각은 바람직하지 못하다.

  • IDE에서 G를 입력하고 자동완성을 하려면 모든 클래스를 열거 한다. IDE를 방해할 이유는 없다.