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

의도를 분명히 밝혀라

의도가 분명한 이름이 정말로 중요하다.
좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.
변수의 존재 이유? 수행 기능? 사용 방법? 주석이 필요하다면 의도를 분명히 드러내지 못한 것이다.

// 이름 d는 아무 의미도 드러나지 않음 (x)
int d;	// 경과 시간

// (o)
int fileAgeInDays;

그릇된 정보를 피하라

프로그래머는 코드에 그릇된 단서를 남겨서는 안 된다.

예를 들어, 직각삼각형의 빗변(hypotenuse)의 약어로 hp를 쓴다면 hp는 유닉스 플랫폼 이나 유닉스 변종을 뜻하기도 하기 때문에 독자에게 그릇된 정보를 제공하게 된다.

또한, 서로 흡사한 이름을 사용하지 않도록 주의하되,
유사한 개념은 유사한 표기법을 사용한다.

의미 있게 구분하라

불용어를 덧붙이는게 아닌 의미를 분명히 구분해라.

서로 다른 클래스 ProductInfo, ProductData는 개념을 구분하지 않은 채 이름만 달리했다. Info와 Data는 a, ad과 마찬가지로 의미가 불분명한 불용어다.

연속된 숫자나 중복을 붙이는 것도 불용어에 해당한다.

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

발음하기 쉬운 이름을 사람들이 더 능숙하게 인식된다.

또한, 쉽게 눈에 띄어야 디버깅 하기 좋다.

인코딩을 피하라

이제는 멤버 변수에 접두어를 붙일 필요도 없다.

유형이나 범위 정보까지 인코딩에 넣지 말자.

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

독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면(코드가 자신만이 이해하는 이름) 이것은 바람직하지 못하다.

남들이 이해할 수 있는 명료함이 중요하다.

클래스 이름

클래스 이름과 객체 이름은 명사나 명사구가 적합하다.

Customer, WikiPage 같이 사용하며 동사는 사용하지 않는다.

메서드 이름

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

postPayment, save, getName, isPosted 같이 사용한다.

기발한 이름은 피하라

농담하지 말고 명료한 이름을 선택해라.

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

똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.
일관성 있는 어휘를 쓰자.

말장난을 하지 마라

한 개념에 한 단어를 사용하라 해서, 같은 맥락이 아닌데도 '일관성'을 고려하지 말아라.

예를 들어, 지금까지 구현한 add 메서드는 모두 기존 값을 더하는 것이라 치자.

새로 작성할 메서드는 집합에 값 하나를 추가하는 것이라 할때, 이 메서드는 기존 add와 맥락이 다른 add(추가)이므로 insert나 append가 적당하다.

의미 있는 맥락을 추가하라

스스로 의미가 분명하지 않은 이름이 있다면,
즉, 독자가 맥락을 유추해야 한다면 접두어(최후의 수단!!)를 붙여 맥락을 좀 더 분명하게 하자.

firstName, lastName, state 라는 변수가 있을 때, 어느 메소드가 state 변수만을 사용한다면 state가 주소라는 사실을 알 수 있을까?

접두어를 붙여서 addrfirstName, addrlastName, addrstate 라 써줘서 맥락을 분명히 해주자.

불필요한 맥락을 없애라

GSD라는 애플리케이션을 짠다고 가정할 때,
모든 클래스 이름을 GSD로 시작하겠다는 것은 정말 바람직하지 못하다.

의미가 분명한 경우에 한해서, 짧은 이름이 긴 이름보다 좋다.

과하게 맥락을 추가하지 말자.

마치면서

자신이 아무리 똑똑하다고 생각해도 자신이 짠 클래스 이름과 메서드 이름을 모두 암기하지 못한다.

끊임없이 코드를 개선하여 가독성을 높이려는 노력을 하자.

의미 있게 이름을 짓는 방법에 대해 공부해보았다.
항상 의식하며 맥락을 고려한, 의미 있는 이름을 지어 보자.

Reference

클린 코드: 애자일 소프트웨어 장인 정신 - 로버트 마틴 지음

좋은 웹페이지 즐겨찾기