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장을 읽으시길 추천드린다.
'독서' 카테고리의 다른 글
<실용주의 프로그래머> 서평 (0) | 2022.05.11 |
---|---|
프로그래머의 뇌 서평 (0) | 2022.03.30 |
(클린코드) 1장. 깨끗한 코드 (1) | 2022.02.20 |
(코드 컴플리트2) 25 - 27장 회고 (0) | 2021.12.30 |
(코드 컴플리트2) 10장 변수 사용 시 고려할 사항 - 2 (0) | 2021.11.30 |