의미 있는 이름
의도를 분명히 밝혀라
변수(혹은 함수나 클래스)의 존재이유, 수행기능, 사용방법, 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. 이름만 고쳐도 함수가 하는일을 이해하기 쉬워진다.
그릇된 정보를 피하라
프로그래머는 코드에 그릇된 단서를 남기면 안된다. 그릇된 단서는 코드 의미를 흐린다. 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안된다. 유사한 개념은 유사한 표기법을 사용한다. 이것도 정보다. 일관성이 떨어지는 표기법은 그릇된 정보다. 대표적인 끔찍한 예) 소문자 L, 대문자 O변수 두 변수를 한번에 사용하면 더욱 끔찍해진다.
의미 있게 구분하라
동일 범위 안에서는 다른 두 개념에 같은 이름을 사용하지 못한다. 황당한 예) class를 이미 사용했다고 klass를 사용; 연속적인 숫자를 덧부틴 이름(a1, a2, aN)은 의도적인 이름과 정 반대다 이런 이름은 그릇된 정보를 제공하는 이름도 아니며, 아무런 정보도 제공하지 못하는 이름일 뿐이다.
불용어는 중복이다. 변수이름에 variable이란 이름 표 이름에 table이라는 단어
발음하기 쉬운 이름을 사용하라
발음하기 어려운 이름은 토론하기도 어렵다.
검색하기 쉬운 이름을 사용하라
인코딩을 피하라
이름에 인코딩할 정보는 아주 많다. 유형이나 범위 정보까지 인코딩에 넣으면 그만큼 이름을 해독하기 어려워진다.
-
헝가리식 표기법
당시는 컴파일러가 타입을 점검하지 않았으므로 프로그래머에게 타입을 기억할 단서가 필요했다.
PhoneNumber phoneString; //타입이 바뀌어도 이름은 바뀌지 않는다.요즘은 IDE에서 컴파일하지 않고도 타입오류를 감지할정도로 발전 했으므로 이러한 표기법은 필요없다.
-
멤버변수 접두어
멤버 변수에 m_ 이란 접두얼르 붙일 필요 없다. 클래스와 함수는 접두어가 필요 없을 정도로 작아야 마땅하다. 또한 멤버 변수를 다른 색상으로 표시하거나 눈에 띄게 보여주는 IDE를 사용해야 마땅하다.
-
인터페이스 클래스와 구현 클래스
옛날 코드에서 많이 사용하는 접두어 I는 주의를 흐트리고 과도한 정보를 제공한다. 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현클래스 이름을 택한다. 구현클래스에 Imp를 붙이는게 I(인터페이스명)보다 낫다.
자신의 기억력을 자랑하지 마라
전문가 프로그래머는 명로함이 최고라는 사실을 이해한다. 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.
-
클래스이름
클래스이름은 명사나 명사구가 적합하다. Manager, Processor, Data, Info 등은 피하고 동사는 사용하지 않는다.
-
메서드이름
메서드이름은 동사나 동사구가 적합하다. postPayment, deletePage, save 등이 좋은 예 접근자, 변경자, 조건자는 javabean표준에 따라 값 앞에 get, set, is를 붙인다. 생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다.
기발한 이름은 피하라
특정 문화에서만 사용하는 농담은 피하는 편이 좋다. 의도를 분명하고 솔직하게 표현하라.
한 개념에 한 단어를 사용하라
일관성 있는 어휘는 코드를 사용할 프로그래머가 반갑게 여길 선물이다. 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.
말장난을 하지 마라
프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 대충봐도 이해할 코드 작성이 목표다.
해법영역에서 가져온 이름을 사용하라, 문제 영역에서 가져온 이름을 사용하라
프로그래머 용어가 있다면 사용하고 없다면 문제영역에서 이름을 가져와서 사용해라
의미있는 맥락을 추가하라
스스로 의미가 분명한 이름이 없지 않다. 하지만 대다수 이름은 그렇지 못하다. 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.
불필요한 맥락을 없애라
⌨️ 클래스, 메서드 등에 적절한 이름을 선택하는 것 부터가 클린코드이다. 이름하나 바꿈으로 인해서 독자가 코드를 쉽게 이해할 수 있다면 조금 더 신경을 써서 이름을 지어줘야겠다. 내 자식 이름을 아무렇게나 급한데로 짓진 않을테니…