본문 바로가기
  • 저희는 평생 개발할 운명이걸랑요
독서는 마음의 양식/클린코드

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

by SpaciousKitchen 2021. 4. 15.

 

해당 게시물은  로버트 C. 마틴 저 'Clean Code' 내용을 정리한 내용입니다.

 

 

우리는 변수에도 함수에도 인수와 클래스 등등 다양한 곳에 수 많은 이름을 붙인다.

좋은 이름은 시간이 걸리지만 시간을 절약하기도 한다.

그러면 함께 일하는 사람이 행복해 지리라.

 

그렇다면 이름을 지을때, 굵직한 질문에 대해 모두 생각해야한다.

 

1.변수의 존재 이유는 ?

2.수행 기능은 ?

3. 사용 방법은?

 

주석이 필요하다는 것은 의도를 드러내지 못했다는 것이다.

 

 

1. 의도를 밝혀라

 

[출처: Clean Code내의 예시]
int d; //시간 경과(단위:날짜)

 

아무런 의도를 들어내지 않는 대표적인 예시이다.

 

int daysSinceCreation;
int fileAgeIndays;
int daysSinceCreataion;

 

[출처: Clean Code내의 예시]

 

코드는 단순성이 아니라 함축성이다.

 

 

각 개념에 이름을 부여한 변수명만 봐도 나아지는 것을  확인할 수 있다.

 

 

 

2.그릇된 정보를 피해라

널리 쓰인이미가 있는 단어를 다른 의미로 사용해서는 안된다. 예로 aix,sco등은 변수로 적당하지 않다. axis라는 의미는 '중심선'이라는 의미를 나타낼때, 좋지만 axis만 보고 '중심선'이구나 라고 파악할 수 없다.

 

 

또한, 'customerList'식의 표현은 금물이다. 실제 List가 아니라면 customers가 더 적합하다.

 

 

3.의미 있게 구분해라.

 

'불용어(noise word) 쓰면 안될 방식이다. (num1,num2,num3...)은 연속될 뿐, 의도적이지 않다. NameString 과 Name에서 전자가 얼마나 '더 뛰어난 의도'를 보인다고 생각하는가 ?  아니다! CustomerData, CusomerInfo 이 둘 은 무슨 차이가 있는가 ?   명시적이라고 생각하는가 ?

 

CustomerObjct라고 명시할 바엔  Customer라고 쓰자!

 

 

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

for (int i=0; i<35;i++{
 s+=(t[i]*4/5;
}

 

만일 여기서 '5'를 수정해야한다고 생각하자 그럼 Ctr+F로 5를 검색하면 얼마나 많은 값들이 참조 되겠는가 ? 

다음으로 바꿔보자.

 

[출처: Clean Code내의 예시]

 

int realDaysPerIdeaDay=4;
const int WORK_DAYS_PER_WEEK=5;
int sum=0;

for (int i=0; i<NUMBERS_OF_TASK;i++){
 
 int realTaskDays=taskEstimate[i]*realDaysPerIdeaDay;
 int realTaskWeeks =(realTaskDays//WORK_DAYS_PER_WEEK);
 sum+=realTaskWeeks;

 
}

 

 

WORK_DAYS_PER_WEEK은 얼마나 찾기 쉬운가!

 

 

클래스의 이름

클래스의 객체 이름은 명사나 명사구가 적합하다. Cutomer,Account 등을 사용하고, Manager,Info Data는 피해라.

 

매서드 이름

매서드 이름은 동사나 동사구가 적합하다. postPayMent,deletePage,save가 좋은 예시이다.

 

 

생성자(Constructor)를 중복정의(overload)할 때는 정적 팩토리 메서드를 사용한다.

메 서드는 인수를 설명하는 이름을 사용한다. 예를 들어, 다음 두 예제를 살펴보자.

Complex fulcrumPoint = Complex. FromRealNumber(23.0);

 

이와 같은 방식보다는 

 

Complex fulcrumPoint = new Complex (23.0);

 

이게 더 낫다!

 

....to be continued

'독서는 마음의 양식 > 클린코드' 카테고리의 다른 글

[Clean Code.Chapter 1_깨끗한 코드]  (0) 2021.04.08

댓글