∥우연えㅓ럼만ĿΓ。우연을필연으로∽♥∥

[Clean Code] 2. 의미 있는 이름

2021年02月06日

클린코드 2장 - 의미 있는이름

의도를 분명하게 밝혀라

변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야한다. 변수(혹은 함수나 클래스)의 존재 이유는? 수행 기능은? 사용방법은? 따로 주석이 필요하다면 의도를 드러내지 못했다는 말이다.

그릇된 정보를 피하라

실제 List가 아니면 명명하지 말고 복수형을 달아 표현

서로 흡사한 이름을 사용하지 않도록 주의해야 한다.

XYZControllerForEfficientHandlingOfStrings

XYZControllerForEfficientStorageOfStrrings

의미 있게 구분하라

Product라는 클래스가 있는데 ProductInfo 혹은 ProductData와 같은 클래스가 있다면 개념을 구분하지 않은 채 이름만 달리한 경우이다.

변수 이름에 variable단어나 표 이름에 table, Name이 아닌 NameString을 사용하는거는 옳지 않다.

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

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

인코딩을 피하라

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

클래스 이름

클래스 이름과 객체 이름은 명산 명사구가 적합하다. Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사를 사용하지 않는다.

메서드 이름

메서드 이름은 동사나 동사구가 적합하다.

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.

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

말장난을 하지 마라

한 개념에 한 단어를 사용하라는 규칙을 따라, 여러 클래스에 add라는 메소드가 생겼다. 모든 메서드의 매개변수와 반환값이 의미적으로 똑같다면 문제가 없다.

하지만 같은 맥락이 아닌데도 일관성을 고려해 단어를 선택한 것은 말장난이다.

프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.

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

전산 용어, 알고리즘 이론, 패턴 이름, 수학 용어 등을 사용해도 괜찮다.

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

우수한 프로그래머와 설계자라면 해법 영역과 문제 영역을 구분할 줄 알아야 한다. 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다.

의미 있는 맥락을 추가하라

불필요한 맥락을 없애라

고급 휘발유 충전소(Gas Station Deluxe)라는 애플리케이션을 짠다고 가정하자. 모든 클래스 이름을 GSD로 시작하겠다는 것은 바람직하지 않다.

일반적으로 짧은 이름보다는 긴 이름이 좋다. 단 의미가 분명한 경우에 한해서다.

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