(클린코드) 2장. 의미 있는 이름

2022. 3. 4. 14:07독서

반응형

클린코드 2장, 의미 있는 이름 챕터를 정리한 글이다.

오른 쪽에 유명한 통계가 있다. 개발자들이 가장 힘들어 하는 것은 바로 

'이름 짓기' 이다. 

 

왜 이름 짓기가 가장 힘들어 하는 일일까?

 

그냥 a,b,c,d 로 이름을 지으면 안 될까?

for 문에서는 i, j, k를 사용해서 처리하며 안 될까?

 

클린코드 2장에서 어떻게 하면 이름을 잘 지을 수 있는지에 대해 알아보자.

 

 

 

 

 

의도를 명확히 밝혀라

모두가 공감할 만한 제목이다. 의도를 명확히 밝힌 클래스명, 변수명은 가독성을 올려줌으로서 (명확하지 않은 것에 비해) 이해하는 시간을 훨씬 줄여준다.

 

그럼 어떻게 '의도를 명확히' 밝힐 수 있을까?

 

책에서는 이에 대한 수단으로 다음과 같은 굵직한 질문에 대답해야한다고 한다.

'변수(혹은 함수나 클래스)의 존재 이유는?', '수행 기능은?' ,'사용 방법은?'

 

변수명 혹은 함수명에 이 것이 어떤 일을 하는지에 대한 함축적 의미를 가지고 있어야 한다고 말한다.

 

내가 생각한 코드를 보자.

 

narr = []
for i in arr:
	i += 1
	narr.append(i)


--------

increasedTime = []
for time in sourceTime:
	time += 1
    increasedTime.append(time)

 

(좋은 내용에 안 좋은 예시)

첫 번째 코드를 보면 narr이 뭘 하는지, arr이 뭐를 담고 있는 배열인지 알지 못한다.

 

하지만 두 번째 코드를 보면 increasedTime은 증가된 시간을 담는 배열임을 알 수 있고,

원래 sourceTime에서 시간을 1씩 증가시켜 increasedTime에 추가하는 것을 알 수 있다.

 

이처럼 뭐하는 녀석인지 의도를 밝히는 것이 중요하다.

 

그릇된 정보를 피하라

이 그릇된 정보는 뭘까?

책에서는 일관성이 떨어지는 표기법을 그릇된 정보라고 한다.

 

어떤 클래스에서는 합에 대한 변수명으로 sum을 쓰고, 어떤 클래스에서는 result로 쓰는 것을 예로 들 수 있으며

 

accountList라고 선언된 변수명이 실제로 List형태가 아니거나 하는 것을 그릇된 정보라고 할 수 있겠다.

 

 

의미 있게 구분하라

책에서는 불요어를 추가해서 정보를 구분하는 것을 적잘하지 못한 방식이라고 말한다.

 

그러니까, customer가 있으면, theCustomer, customerObject와 같이 말이다.

 

그럼 이 각 customer들은 어떻게 구분할 것 인가?

 

정말 저 세가지 customer들은 다른 것인가? 어떻게 다른가? 

 

 

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

이것은 어쩌면 우리의 두뇌외 관련된 얘기에 가깝다.

우리 두뇌에서 상당 부분은 단어라는 개념만 전적으로 처리한다고 한다. 

 

그렇기 때문에 단어로 발음 될 수 있는 것을 사용하면 훨씬 얘기를 쉽게 꺼낼 수 있고, 토론하기 쉬워지는 것 아니겠는가?

 

 

이 밖에도 클래스 이름은 명사나, 명사구를 사용하고, 메서드 이름은 동사나 동사구가 적합하다고 얘기하고 있다.

 

또 기발한 이름을 피하며, 한 개념에 한 단어를 사용하고 의미 있는 맥락을 추가하여서 코드를 작성하라는 등

여러가지 조언들을 2장에서 해주고 있다.

 

이름짓기에 대해 고민하는 분들은 클린 코드 2장을 읽으시길 추천드린다.

반응형