
의도를 분명하게 밝혀라 (22p)
- 좋은 이름을 지을 수 있도록 돕는 질문들
- 변수, 함수, 클래스의 존재 이유를 이름을 통해 알 수 있는지
- 변수, 함수, 클래스의 수행 기능을 이름을 통해 알 수 있는지
- 사용 방법을 이름을 통해 알 수 있는지
그릇된 정보를 피하라 (24p)
- 널시 쓰이는 의미가 있는 단어를 변수, 메소드, 클래스 명으로 사용하지 말라
- 서로 흡사한 변수, 함수, 클래스 명을 사용하지 말 것
의미있게 구분하라 (25p)
- 아무런 정보도 제공하지 못하는 이름은 사용하지 않는다. (var a, func b())
- 읽는 사람이 차이를 알도록 이름을 지어라.
- 클래스 MoneyAmount와 Money는 구분이 안 된다. 사용하지 말아라.
- 변수 customerInfo와 customer 역시 구분이 안 된다. 사용하지 말아라. 차이를 두어야 한다.
발음하기 쉬운 이름을 사용하라 (27p)
검색하기 쉬운 이름을 사용하라 (28p)
인코딩을 피하라 (29p)
자신의 기억력을 자랑하지 마라 (31p)
- 반복문에서 i,j,k 정도는 사용해도 괜찮다. (l은 절대 안 된다.)
- 단, 루프 범위가 아주 작고, 다른 이름과 충돌하지 않을 때만이다.
- 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. 그래서 남들이 이해할 수 있는 코드를 내놓는다.
클래스 이름 (32p)
- 클래스 이름은 명사나 명사구가 적합하다
- Customer, WikiPage, Account 등이 좋은 예다
- Manager, Processor, Data, Info 등은 나쁜 예다
메소드 이름 (32p)
- 메소드 이름은 동사나 동사구가 적합하다.
- postPayment(), deletePage(), save() 등이 좋은 예다
- get, set, is 를 앞에 사용하는 것도 좋은 방법
- getName(), setTableService(), isPosted()
기발한 이름은 피하라 (33p)
- 이름의 분명하게 표현하라. 누가 봐도 알 수 있는 단어로 표현하라.
한 개념에 한 단어를 사용하라 (33p)
- 일관성 있는 어휘를 사용해야 한다.
- 예를 들어 네트워크를 가져오는 코드라 하면 모든 네트워크 가져오는 코드를 fetch~()로 통일시켜야 한다.
- 어떤 클래스에서는 get~()으로 네트워크를 가져오고 어떤 클래스에서는 fetch~()으로 네트워크를 가져와서는 안 된다. 일관성 있게 어휘를 맞추어야 한다.
말장난 금지 (34p)
- 프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다.
- 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.
해법 영역에서 가져온 이름을 사용하라 (34p)
- 해법 영역과 관련이 깊은 코드라면 해법 영역에서 가져온 이름을 사용하라 (Stack, Queue, Visitor 등)
- 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다.
문제 영역에서 가져온 이름을 사용하라 (34p)
- 문제 영역과 관련이 깊은 코드라면 문제 영역에서 가져온 이름을 사용하라.
의미 있는 맥락을 추구하라 (35p)
- 클래스, 메소드, 변수에 맥락을 부여해야 한다.
- 예를 들어 firstName, lastName, street, city, state, zipCode라는 변수가 있다고 하자. 주소라는 사실을 금방 알아챌 수 있다. 하지만 어느 메소드가 state라는 변수 하나만 사용한다면? 변수 state가 주소 일부라는 사실을 금방 알아챌까?
- 이런 경우 앞에 접두어 address를 추가함으로 addressState라 쓰면 맥락이 더 분명해진다.
- 혹은 Address라는 클래스를 생성하면 훨씬 좋다. 그러면 변수가 Address라는 더 큰 개념에 속한다는 사실이 컴파일러에게도 분명해진다.
- 맥락을 분명하게 하는 방법은 객체를 관리하는 클래스를 생성하고 그 내부에 클래스와 관련 있는 행동을 하는 변수나 메소드를 집어넣으면 된다.
불필요한 맥락을 없애라 (37p)