Book/Programming

[CleanCode] 2장 의미 있는 이름

개랭갱깽스타 2022. 2. 16. 10:00

의도를 분명히 밝혀라

 

그릇된 정보를 피하라

 

의미 있게 구분하라

❌ 중복

❌ 변수 이름에 variable

❌ 표에 table

 

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

 

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

이름의 길이는 범위 크기에 비례해야 한다.

MAX_CLASSES_PER_STUDENT 는 grep 으로 찾기 쉽지만, 숫자 7은 은근히 까다롭다.

 

인코딩을 피하라

❌ 헝가리식 표기법: 컴퓨터 프로그래밍에서 변수 및 함수의 이름 인자 앞에 데이터 타입을 명시하는 코딩 규칙

❌ 멤버 변수 접두어: m_...

❌ 인터페이스 클래스와 구현 클래스: IShapeFactory 보다는 차라리 ShapeFactoryImpl

 

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

전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. 전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.

 

클래스 이름

명사나 명사구가 적합

⭕ Customer, WikiPage, Account, AddressParser 등

❌ Manager, Processor, Data, Info

❌ 동사

 

메서드 이름

동사나 동사구가 적합

⭕ postPayment, deletePage, save 등

접근자Accessor, 변경자Mutator, 조건자Predicate 는 자바빈 표준에 따라 값 앞에 get, set, is 를 붙인다.

생성자를 overload 할 때는 정적 팩토리 메서드를 사용한다.

⭕ Complex fulcrumPoint = Complex.FromRealNumber(23.0);

❌ Complex fulcrumPoint = new Complex(23.0);

 

기발한 이름은 피하라

 

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

일관성 있는 어휘

❌ fetch, retrive, get 섞어 쓰기

❌ controller, manager, driver 섞어 쓰기

 

말장난을 하지 마라

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

AS-IS) add: 기존 값 두개를 더하거나 이어서 새로운 값을 만든다.

TO-DO) 집합에 값 하나를 추가한다. → ❌ add | ⭕ insert, append

 

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

기술 개념에는 기술 이름이 가장 적합한 선택이다.

❌ 모든 이름을 모든 문제 영역domain 에서 가져온다.

  • VISITOR패턴 - 알고리즘을 객체 구조에서 분리시키는 디자인 패턴

 

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

적절한 ‘프로그래머 용어'가 없다면 문제 영역에서 이름을 가져온다.

 

의미 있는 맥락을 추가하라

addr 라는 접두어를 추가해 addrFirstName, addrLastName, addrState 라 쓰면 맥락이 좀 더 분명해진다. Address 라는 클래스를 생성하면 더 좋다.

 

불필요한 맥락을 없애라

accountAddress 와 customerAddress 는 Address 클래스 인스턴스로는 좋은 이름이나 클래스 이름으로는 적합하지 못하다.

포트주소, MAC 주소, 웹 주소를 구분해야 한다면, PostalAddress, MAC, URI 라는 이름도 괜찮다.

 

 

반응형