•
변수, 메소드, 클래스의 이름을 결정할 때는 이름에 정보를 담아내야 한다.
•
좋은 이름을 선택하면 생각보다 많은 의미와 정보를 전달할 수 있다.
•
이 장은 다음과 같은 여섯 개의 주제로 나누어져있다.
◦
특정한 단어 고르기
◦
보편적인 이름 피하기
◦
추상적인 이름 대신 구체적인 이름 사용하기
◦
접두사 혹은 접미사로 이름에 추가적인 정보 덧붙이기
◦
이름이 얼마나 길어져도 좋은지 결정하기
◦
추가적인 정보를 담을 수 있게 이름 구성하기
특정한 단어 고르기
•
매우 구체적인 단어를 선택하여 추상적인 단어를 피하는 것이다. 명확성이 중요하다.
◦
get과 같이 여러 뜻을 가질 수 있는 단어를 선택하는 것은 가독성을 해치는 행위다.
◦
재치있는 이름보다 명확하고 간결한 이름이 더 좋다.
보편적인 이름 피하기
•
tmp, retval, foo같은 축약어나 의미없는 단어대신 개체의 값이나 목적을 정확하게 설명하는 단어를 골라야 한다.
◦
추상적이거나 축약어는 정보를 제대로 담고 있지 않다. 대신 구체적으로 설명하는 이름을 사용하라.
•
tmp같이 보편적인 단어가 더 좋은 설명이 되는 경우도 물론 있다.
◦
swap 메소드의 수도 코드를 살펴보면 tmp가 사용되는 경우가 잦은데, 이처럼 메소드에서 해당 변수에게 요구하는 의미가 명확한 경우에는 사용해도 좋다.
◦
tmp라는 이름은 대상이 짧게 임시적으로 존재하고 임시적 존재 자체가 메소드에 있어서 변수의 가장 중요한 역할일 때 한해서 사용해야 한다.
◦
tmp, it, retval 같은 보편적인 이름을 사용하려면 꼭 그렇게 해야 하는 이유가 있어야 한다.
추상적인 이름보다 구체적인 이름을 선호하라
•
변수나 함수 혹은 다른 요소에 이름을 붙일 때, 추상적인 방식이 아닌 구체적인 방식으로 묘사하라.
추가적인 정보를 이름에 추가하기
•
변수의 이름은 작은 설명문이다. 이름 안에 끼워 넣은 추가 정보는 변수가 보일 때마다 우리에게 전달된다.
•
사용자가 반드시 알아야 하는 변수와 관련한 중요한 정보를 추가적인 단어로 만들어서 전달하는 것이 좋다.
◦
단위를 포함하는 값들
▪
시간의 양이나 바이트의 수와 같은 수치를 담고 있다면 변수명에 단위를 포함시키는 것이 도움이 된다.
◦
다른 중요한 속성 포함하기
▪
prefix를 유용하게 사용하라, 변수의 맥락을 파악하고 맥락을 표현할 수 있는 정보를 이름에 담아내어라
이름이 얼마나 길어져도 괜찮은지 결정하기
•
변수명을 선택할 때, 이름이 지나치게 길어져선 안 된다는 룰이 암묵적으로 존재하지만 이는 좋은 룰은 아니다.
◦
나는 변수명이 적당히 길어도 된다고 생각함.. 단어 5~6개 정도까진 괜찮은듯..
•
제한적인 범위에서는 짧은 이름이 괜찮다.
◦
제한적인 범위에서 사용되는 변수는 거기서 사용되고 끝날 것이기 때문에 길 필요가 없다. 여러 곳에서 사용된다면 변수의 이름만 보고도 이것이 어떤 맥락을 제공하는지 알아야 한다.
•
긴 이름 입력하기 - 더 이상 문제가 되지 않는다.
◦
더 이상 긴 이름을 입력하는 것은 긴 이름을 사용하지 말아야할 이유에 해당하지 않는다. IDE가 많이 발전했기 때문이다.
•
약어와 축약형
◦
특정 도메인에 국한된 의미를 가진 약어 사용은 좋은 생각이 아니다. 가급적이면 약어를 쓰지말라는 뜻이다..!
•
불필요한 단어 제거하기
◦
다음과 같이 경우에 따라서는 정보 손실 없이 변수의 길이를 줄일 수 있다.
▪
ConvertToString() → ToString()
▪
DoServeLoop() → ServerLoop()
추가적인 정보를 담을 수 있게 이름 구성하기
•
_, -, 대문자를 적절히 사용하면 이름에 더 많은 정보를 담을 수 있게 된다.
요약
•
특정한 단어를 사용해라
◦
예를 들어 상황에 따라 Get 대신 Fetch나 Download를 사용하는 것이 더 나을 수 있다.
•
꼭 그래야 하는 이유가 없다면 tmp나 retval과 같은 보편적인 이름의 사용을 피하라.
•
대상을 자세히 묘사하는 구체적인 이름을 이용하라.
◦
ServerCanStart()는 CanListenOnPort()에 비해서 의미가 모호하다.
•
변수명에 중요한 세부 정보를 덧붙여라.
◦
예를 들어 밀리초의 값을 저장하는 변수 뒤에 ms를 붙이거나 이스케이핑을 수행하는 변수의 앞에 raw를 붙이는 것이다.
•
사용 범위가 넓으면 긴 이름을 사용하라
◦
여러 페이지에 걸쳐서 사용되는 변수의 이름을 하나 혹은 두 개의 짧은 문자로 구성해 의미를 알아보기 힘들게 짓지 마라
◦
다만 적은 분량에서 잠깐 사용되는 변수명은 짧을수록 더 좋다.
•
대문자나 밑줄 등을 의미 있는 방식으로 활용하라
◦
예를 들어 클래스 멤버를 로컬 변수와 구분하기 위해서 뒤에 _를 붙일 수 있다.