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

sky·2022년 9월 23일
0

Clean Code

목록 보기
2/4
post-thumbnail

좋은 이름을 정의해보자.

의도를 분명히 밝혀라

변수 이름을 짓고, 옆에 주석을 달아야 이해가 되는 변수 이름은 의도가 제대로 담기지 않았다고 봐야 한다.

아래와 같이 딱 봤을 때 이해가 되어야 한다.

int elapsedTimeInDays;
int daysSinceCreation;
int daySinceModification;

예시 코드에 두들겨 맞고 말았다.

<나쁜 코드>

public List<int []> getThem() {
	List<int []> list1 = new ArrayList<int []>();
    for(int [] x : the List)
    	if(x[0] == 4)
        	list.add(x);
        return list1;

나만 이런 코드 짠 거 아니지
특히 알고리즘 문제 풀 때 이런 경우가 많을 것 같다. 물론 긴 문제가 아닌 이상 알고리즘에 네이밍 스킬까지 적용할 이유는 크지 않은 것 같다.

그릇된 정보를 피하라

흔히 밈으로 '우리는 이걸 00라고 부르기로 했어요'라는 말이 있을 정도로 사회적으로 통용되는 단어는 굉장히 중요하다. 모두 사과를 보고 사과라고 부르는데, 나 혼자 오렌지라고 부르면 안 되니까.

이건 처음 들었는데, hp, aix, sco는 유닉스 플랫폼이나 유닉스 변종을 가리키는 이름이라 변수 이름으로 사용하면 안 된다고 한다.

그리고 실제 배열로 저장하는 게 아닌데 List라는 이름을 변수에 붙인다면, 그 코드를 보는 대부분이 오해할지도 모른다.

너무 비슷하게 생긴 긴~ 변수를 한 글자만 바꿔 다른 곳에서 또 사용한다면? 같은 변수라고 착각할지도 모른다.

의미 있게 구분하라

저자는 '불용어'의 사용을 피하라고 말한다. (내가 제일 잘 하는 거다)
Product가 있고 ProductData, ProductInfo가 있다면 이 세 개는 어떤 차이가 있을까? 그냥 a product, the product라고 이름 짓는 거랑 크게 차이가 없는 거다.

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

이 책 초반을 세 번째 읽으면서 기억나는 거라곤 이 파트 뿐이다.

genymdhms

저자가 다니던 회사의 코드에 이런 해괴한 변수가 있다고 한다. 그리고 저자는 이를 '젠 야 무다 함즈' 라고 읽었다고 한다. 이 단어를 잊을 수가 없다.

클래스 / 메서드 이름 짓기

  • 클래스 이름과 객체 이름은 명사, 명사구
  • 메서드 이름은 동사, 동사구
    💫 get, is, set 등을 접두어로 붙이기도 한다.

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

어떤 정보를 가져오는 여러 개의 함수가 있다고 가정하자. 이때 fetch, retrieve, get 등의 여러가지 단어를 써서 변수를 제각각 짓는다면 검색도 어렵고 기억하기는 더더욱 어려울 것이다.

비슷한 예시로는 controller, manager, driver가 있다.

적용 코드

var p = intent.getStringExtra("poster")

여기에서 p는? poster를 의미한다. 왜 줄여 썼을까.. 그렇게 귀찮았을까..(이 변수는 딱 2번 적는다)

let LiRefsForQuiz = Array.from(Array(QUIZ_LENGTH), () => Array());

이건 내가 쓴 코드가 아니긴 한데, LiRefsForQuiz는 Li는 list인 것으로 추정된다. 대충 퀴즈 리스트를 위한 ref라는 뜻이다.
결국 이 변수의 본질은 배열이니까, QuizRefList가 낫지 않을까 하는 생각을 해본다.

setAllProducts(bagProducts.concat(hairBandProduct));
setProducts(bagProducts.concat(hairBandProduct));

이런 코드도 있는데, 이 코드가 한 100번째 줄에 있고 실제 AllProducts와 Products의 차이는 500번째 줄 즈음에 나타난다. 처음 코드를 읽었을 때 참 당황스러웠다.
알고보니 다음과 같았다.

  • AllProducts : 모든 상품
  • Products : 선택된 카테고리에 해당하는 상품

애초에 selectedProducts라고 이름을 지었다면 더 좋았을 것 같다.

profile
우당탕탕 개발일기

0개의 댓글