의미 있는 이름
의도를 분명히 하라
변수나 함수 그래고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다.
변수(혹은 함수나 클랫그)의 존재 이유는? 수행기능은? 사용방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
그릇된 정보를 피하라
그릇된 단서는 코드의 의미를 흐린다. 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안된다.
List
라는 단어는 프로그래머에게는 특수한 의미이다.
실제 List가 아니라면, accountList
라 명명하지 않아야 한다. 실제 List가 아니라면 프로그래머에게 그릇된 정보를 제공하는 셈이다.
의미 있게 구분하라
명확한 관례가 없다면 moneyAmount
는 money
와 구분이 안된다.
customerInfo
는 customer
accountData
는 account
theMesage
는 message
와 구분이 안된다.
읽는 사람이 차이를 알도록 이름을 지어라. 불용어1를 추가한 이름은 아무런 도움이 되지 않는다.
불용어: 불용어란 앞서 말한 a 와 the 같이 자주 등장하지만 중요한 의미를 가지고 있지 않은 단어들을 말함. (큰 의미가 없는 단어)
발음하기 쉬운 이름을 사용하라
말을 처리하려고 발달한 두뇌를 활용하지 않는다면 안타까운 손해다. 그러므로 발음하기 쉬운 이름을 선택한다. 발음하기 어려운 이름은 토론하기도 어렵다.
검색하기 쉬운 이름을 사용하라
문자 하나를 사용하는 이름과 상수는 텍스트코드에서 쉽게 눈에 띄지 않는다는 문제점이 있다.
저자는 간단한 메서드에서 로컬 변수만 한 문자를 사용한다. 이름 길이는 범위 크기에 비례해야 한다.
자신의 기억력을 자랑하지 마라
문자 하나만 사용하는 변수 이름은 문제가 있다.
루프에서 반복횟수를 세는 변수 i, j, k
는 괜찮다. l은 절대 안된다.
명료함이 최고 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.
클래스 이름
클래스 이름과 객체 이름은 명사나 명사구가 적합하다.
동사는 사용하지 않는다.
메서드 이름
메서드 이름은 동사나 동사구가 적합하다.
postPayment, deletePayment, save 등이 좋은 예다.
접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean 표준에 따라 값 앞에 get
, set
, is
를 붙인다.
기발한 이름은 피하라
특정문화에서만 사용하는 농담은 피하는 편이 좋다. 의도를 분명하고 솔직하게 표현하라.
한 개념에 한 단어를 사용하라
추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
예를 들어, 똑같은 메서드를 클래스마다 fetch, retrieve, get
으로 제각각 부르면 혼란스럽다.
일관성 있는 어휘는 코드를 사용할 프로그래머가 반갑게 여길 선물이다.
말장난을 하지 마라
한 단어를 두 가지 목적으로 사용하지 마라.
"한 개념에 한 단어를 사용하라"는 규칙을 따랐더니, 예를 들어, 여러 클래스에 add
라는 메서드가 생겼다. 모든 add
메서드의 매개변수와 반환값이 의미적으로 똑같다면 문제가 없다.
하지만 같은 맥락이 아닌데도 일관성
을 고려해 add
라는 단어를 선택한다.
프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다. 의미를 해독할 책임이 독자에게 있는 논문 모델이 아니라 의도를 밝힐 책임이 저자에게 있는 잡지모델을 생각하면 된다.
해법 영역에서 가져온 이름을 사용하라.
전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜챃다.
모든 이름을 문제 영역(domain)에서 가져오는 정책은 현명하지 못하다.
문제 영역에서 가져온 이름을 사용하라.
적절한 프로그래머 용어
가 아니면 문제 영역에서 이름을 가져온다. 그러면 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있다.
의미 있는 맥락을 추가하라
클래스, 함수, 이름 공간을 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.
addr
라는 접두어를 추가하면 맥락이 좀 더 분명해진다.
Address
클래스를 생성해도 좋다.
불필요한 맥락을 없애라
일반적으로는 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 경우에 한해서다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다.
Last updated