이름에 정보 담기
더스틴 보즈웰, 트레버 파우커
코드 예제의 경우 책의 예제를 살짝 변경한 것이 대부분이라 이해가 안되시면 책을 봐주시기를 부탁드립니다.
혹 의견주실 것이 있으면 댓글 달아주시면 감사하겠습니다 :)
느낌표 ! (인상 깊은 문장 | 문맥)
특정한 단어 고르기
‘이름에 정보를 담아내는’ 방법 중 하나는 매우 구체적인 단어를 선택하여 ‘무의미한’ 단어를 피하는 것이다.
p.30
보편적 단어
function getImages() {}
getImages 는 이미지를 가져온다는 것을 알 수 있지만 디바이스 내의 이미지, 로컬 캐시, 데이터베이스, 인터넷 등 어디서 가져오는지 알 수 없다. 인터넷에서 가져오는 것이라면 fetchImages 가 더 의미있는 이름이 될 것이라고 저자는 설명한다.
class VideoPlayer {
stop() {}
}
stop 메소드명은 그럭저럭 괜찮지만 정지된 상태에서 시작이 가능하다면 pause, resume 의 메소드명이 더 적절하다고 저자는 설명한다.
단위를 포함하는 값들
변수가 시간의 양이나 바이트의 수와 같은 측정치를 담고 있다면, 변수명에 단위를 포함시키는 게 도움이 된다.
p.40
function timeout(delay) {}
저자는 timeout 함수 인자 delay 에 시간 단위가 없음을 지적하고 있다. ms 인지 s 인지 변수명을 봐서는 모른다는 것이다. 단위일 경우에는 아래와 같이 변수명을 작성하기를 권고하고있다.
function timeout(delay) {} // X
function timeout(delaySecs) {} // O
function timeout(delayMs) {} // O
function fileSizeLimitCheck(size) // X
function fileSizeLimitCheck(sizeMb) // O
function fileSizeLimitCheck(sizeKb) // O
다른 중요한 속성 포함하기
변수의 의미를 제대로 이해하는 것이 중요하다면 그 의미를 드러내는 정보를 변수의 이름에 포함시켜야 한다.
p.41
// 평문인 비밀번호
const password = .. // X
const plainTextPassword = .. // O
// url encode 된 data
const data = .. // X
const dataUrlEnc = .. // O
약어와 축약형
팀에 새로 합류한 사람이 이름이 의미하는 바를 이해할 수 있을까? 만약 그렇다면 그 이름은 괜찮은 것이다.
p.45
예를 들어 AdminBoardManageController 를 ABMController 로 사용한다면 같이 만들고 사용했던 팀원은 알겠지만 새로운 팀원은 해당 명명을 보고 멈칫하게 된다. 쓰다보면 적응이야 되겠지만 저자는 이렇게하면 안된다고 말하고 있다.
Chapter 2 느낌
Chapter 2 에서는 쉬운 예제와 친절한 설명으로 되어있지만 저자가 지적한 부분을 과거 혹은 현재에도 범하고있다는 것을 깨닫고 감탄과 탄식을 하게한다. 특히나 단위를 뒤에 적는 것은 의식하지 못하다가 의식하고 나니 기존의 코드가 모호해 보이는 것이 계속 공부해야하는 이유인 것 같다. 변수명, 함수명을 잘 짓는다는 것은 버그를 확실히 줄이고 코드의 품질을 올려줄 수 있는 것 같다. 그러기 위해서 끝없는 불편함으로 변수명, 함수명을 봐야할 것 같다.