기술서적

Clean Code - #2장. 의미 있는 이름

skysoo1111 2022. 4. 7. 12:56

clean code 라는 책을 읽고서 일부 내용을 정리하려고 한다.

2장. 의미 있는 이름

의도를 분명히 밝혀라

그릇된 정보를 피하라

실제 컨테이너가 List일지라도 컨테이너 유형을 이름에 넣지 않는 편이 좋다.

❌ Bad
List<String> accountList = new ArrayList();

✅ Good
List<String> accounts = new ArrayList();

변수명을 소문자 l이나 대문자 O를 사용하는 것은 가독성면에서 최악이다.

의미 있게 구분하라

Product라는 클래스가 있다고 가정해보자.
여기에 ProductInfo나 ProductData와 같은 클래스를 추가한다면 개념 구분 없이 이름만 달리한 경우다. 
-Info, -Data는 아무런 정보도 주지 못한다. Product1, Product2 와 마찬가지인 셈이다.

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

❌ Bad
for (int j=0; j<34; j++) {
    s += (t[j]*4/5);
}

✅ Good
int realDaysPerIdealDay = 4;
int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for(int j=0; j<NUMBER_OF_TASKS; j++) {
    int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
    int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
    sum += realTaskWeeks;
}

이름의 의미 있게 지으면 함수가 길어진다. 하지만 WORK_DAYS_PER_WEEK를 찾기가 얼마나 쉬운지 생각해보자.
그냥 5를 사용한다면 숫자5를 모두 찾고 그 의미를 분석해야 한다.

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

자신만이 아는 이름으로 변수명을 짓는다면 그것은 바람직하지 못하다.
최악은 a와 b를 이미 사용했으므로 c를 사용한다는 논리이다.

단, 루프 범위가 아주 작은 경우에 한해서 반복 횟수를 세는 i,j,k는 괜찮다.

클래스 이름 & 메서드 이름

클래스 이름은 명사나 명사구를 사용하자.
❌ Bad
Manager, Data, Info
✅ Good
Customer, Account

메서드 이름은 동사나 동사구를 사용하자.
✅ Good
postPayment, deletePage

접근자, 변경자, 조건자는 javabean 표준에 따라 get,set,is 를 붙이자.

정적 팩토리 메서드를 사용하라

❌ Bad
Complex fulcrumPoint = new Complex(23.0);

✅ Good
Complex fulcrumPoint = Complex.FromRealNumber(23.0);

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.(일관성 있는 어휘 사용)
똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다.