이름이 중요한 이유?명명이 중요한 이유명명에 대한 다양한 관점초기 명명 관행은 지속적인 영향을 미친다.명명의 인지적 측면형식이 있는 이름 STM을 돕는다.명확한 이름이 LTM에 도움이 된다.변수 이름은 이해에 도움이 되는 다양한 유형의 정보를 포함할 수 있다.이름의 품질 평가 시기어떤 종류의 이름이 더 이해하기 쉬운가?축약할 것인가 하지 않을 것인가?단일 문자가 변수로 흔히 사용된다.(i, j, k ..)스네이크 케이스냐 캐멀 케이스냐?이름이 버그에 미치는 영향나쁜 이름을 가진 코드에 버그가 더 많다.더 나은 이름을 선택하는 방법이름 틀더 나은 변수명에 대한 페이텔슨의 3단계 모델요약
3부는 코드를 읽거나 생각하는 것보다 작성하는 과정을 자세히 살펴본다.
이름이 중요한 이유?
넷스케이프의 프로그래머 필 칼튼은 컴퓨터 과학에 난제가 딱 두가지가 있는데 바로 캐시 무효화와 이름짓기 라는 유명한 말을 했다고함
이름 짓는 일은 어렵지만 코드에서 우리가 추론하는 객체에 맞는 이름을 고르는 것은 중요하다.
왜 명명 과정이 중요할까?
명명이 중요한 이유
코드베이스에서 식별자의 이름은 프로그래머가 명명한다. 식별자에는 타입, 변수, 메서드 등등 네임스페이스가 포함되고 프로그래머는 이들의 이름을 짓는다. 이름이 중요한 이유는 네가지가 있다.
- 이름은 코드베이스의 상당한 부분을 차지함
- 코드 리뷰 시 이름의 역할
- 1000건 이상의 리뷰 코멘트가 달린 170건 이상의 코드 리뷰를 분석한 결과 4건 중 1건이 명칭과 관련한 언급을 포함했다고함
- 이름은 문서화의 가장 쉬운 형태
- 이름이 표식 역할을 할 수 있음
명명에 대한 다양한 관점
좋은 이름을 고르는 것은 중요하다. 좋은 이름에 대해 명명법 연구자들이 가지고 있는 세가지 관점을 확인해보자.
- 좋은 이름은 문법적으로 정의할 수 있다.
- 어떤 사람들은 이름의 문법에 기초한 몇 가지 규칙을 지켜야 한다고 믿는다.
- 사이먼 버틀러는 변수 이름과 관련된 이슈 목록을 만듬
- 식별자는 대문자를 올바르게 사용해야함
- 식별자는 연속된 여러 개의 밑줄을 가지면 안됨(__)
- 식별자는 단어로 만들어야 하고 약어는 원래의 명칭보다 더 자주 사용될 경우에만 사용해야 한다.
- 식별자에 사용되는 단어는 두 개에서 네 개 사이어야 한다.
- 식별자에 사용되는 단어는 네 개를 초과해서는 안된다.
- 식별자의 길이는 8글자 보다 작으면 안된다.
- 분명한 이유가 없다면 열거형은 알파벳 순서로 선언되어야 한다.
- 식별자는 밑줄로 시작하거나 끝나서는 안된다.
- 헝가리언 표기법으로 식별자 이름에 타입 정보를 나타내서는 안된다.
- 긴 식별자 이름은 가능한 한 피해야 한다.
- 식별자는 대문자와 소문자를 표준적이지 않은 방법으로 섞어서 사용하면 안 된다.
- 식별자는 숫자만을 나타내는 단어나 수를 사용하면 안된다.
- 이름은 코드베이스 내에서 일관성이 있어야 한다.
- 좋은 이름에 대한 또 다른 관점은 일관성이다.
초기 명명 관행은 지속적인 영향을 미친다.
식별자 이름의 품질과 관련해서 더 큰 코드베이스라고 더 나쁠 것은 없다.
오래전 코드베이스를 근래의 코드베이스와 비교했을 뿐만 아니라 코드베이스 내에서 시간이 지남에 따라 이름 짓기 규칙이 어떻게 변경되는지 조사했고, 단일 코드베이스에서는 시간이 지난다고 해서 명명 규약이 개선되지 않는다는 것을 발견했다고함
즉 새 프로젝트를 시작할 때는 초기 단계에서 이름을 만드는 방식이 그 이후로도 계속 사용될 가능성이 높기 떄문에 주의를 기울어야 한다.
명명의 인지적 측면
형식이 있는 이름 STM을 돕는다.
변수 이름의 형식을 지정하는 방법에 대한 명확한 규칙을 가지고 있으면 STM이 코드에 있는 이름을 이해하는데 도움이 될 수 있다.
명확한 이름이 LTM에 도움이 된다.
어정쩡한 이름보다 긴 이름이 훨씬낫다.
변수 이름은 이해에 도움이 되는 다양한 유형의 정보를 포함할 수 있다.
식별자 이름에 세 가지 유형의 지식을 표현할 수 있으며 이를 통해 익숙하지 않은 이름을 빠르게 이해하는데 도움을 얻을 수 있다.
- 코드의 도메인에 대해 생각할 때 이름이 도움이 된다.
- 프로그래밍에 대해 생각할 때 이름이 도움이 된다.
- 경우에 따라 변수에 LTM이 이미 알고있는 규약에 대한 정보가 포함될 수 있다.
이름의 품질 평가 시기
코딩하는 도중에 이름에 대해 생각하고 좋은 품질의 이름을 짓기는 어렵다. 코딩 이외에 시간에 이름의 품질을 숙고하는 것이 바람직하다.
어떤 종류의 이름이 더 이해하기 쉬운가?
축약할 것인가 하지 않을 것인가?
완전한 단어로 구성된 식별자가 실제로 더 이해하기 쉽다는 근거를 살펴봄
코드를 이해하고 버그를 쉽게 찾기 위해서라면 명확한 의미의 단어를 사용해야 하는 반면, 기억을 잘하기 위해서라면 간결한 약자를 사용해야 한다. 좋은 변수 이름을 명명하기 위해서는 이 둘 사이의 주의 깊은 균형이 중요하다.
단일 문자가 변수로 흔히 사용된다.(i, j, k ..)
단일 문자 변수 이름과 데이터 타입의 연관성에 대한 연구 결과는 다른 사람에 대해 우리가 어떤 가정을 할 때 그것을 당연한 것으로 여길 수 없다는 점을 상기시켜 준다.
어떤 문자가 특정한 타입에 대한 아이디어를 확실하게 전달하여 독자가 코드를 이해하는 데 도움이 될 것이라고 생각할 수 있지만, 몇 가지 구체적인 경우를 제외하면 그렇게 될 가능성이 낮다. 따라서 식별자의 이름을 단어를 선택하거나 명명 규약에 따르는 것이 향후 코드 이해를 위해 더 나은 방법이다.
스네이크 케이스냐 캐멀 케이스냐?
캐멀 케이스가 프로그래머와 비프로그래머 모두에게서 더 높은 정확도를 갖는다는 것을 보여줬다고 함
식별자 이름이 캐멀 케이스로 작성되었을 때 올바른 옵션을 선택할 확률이 51.5% 더 높았다고 한다.
그러나 답을 선택하는 데 들어간 시간 역시 더 걸렸다고함 캐멀 케이스로 적힌 식별자를 찾는데 0.5초가더 걸렸다고 한다.
프로그래머들은 변수 이름이 캐멀 케이스로 작성된 경우 더 빨리 답을 찾는다는 것을 발견했다고 함
반면에 하나의 식별자 스타일로 훈련한 것이 다른 스타일을 사용할 때 부정적인 영향을 끼친다는 점도 밝혀졌다고 함
이름이 버그에 미치는 영향
나쁜 이름을 가진 코드에 버그가 더 많다.
잘못된 이름 문제를 해결하는 것이 반드시 버그를 고치거나 예방하지는 않지만, 코드베이스를 검사하여 잘못된 이름이 발생하는 위치를 찾아내는 일은 코드를 개선하고 버그발생 가능성이 있는 위치를 찾는 데 도움이 될 수 있다.
이것이 코드에서 나쁜 이름을 찾아야 하는 또 다른 이유다. 이름을 개선하면 간접적으로 버그가 줄어들거나, 더 나은 이름을 사용한 코드는 이해하기 쉽기 때문에 최소한 수정 시간이 단축될 수 있다.
더 나은 이름을 선택하는 방법
이름 틀
이름 틀은 변수 이름의 요소가 일반적으로 결합되는 패턴이다.
- 예를 들어, 한 사람이 매달 최대로 받을 수 있는 혜택에 대해 선택된 이름은 아래와 같다. 이름은 정규화 되므로 max는 max또는 maximum이고 benefit은 benefits일 수 있다.
- max_benefit
- max_benefit_num
- benefitx
- max_num_of_benefit
- …
이러한 틀을 보면 개발자가 동일한 변수 이름을 선택할 가능성이 낮은 이유를 알 수 있다.
유사한 이름 틀을 사용하면 작업 공간 기억과 LTM에 큰 도움이 되기 때문에 각 코드베이스에서 사용할 수 있는 여러 가지 이름 틀을 미리 정해놓는 것이 좋다.
더 나은 변수명에 대한 페이텔슨의 3단계 모델
페이텔슨은 개발자들이 더 나은 이름을 선택하는 데 도움이 되도록 3단계 모델을 설계했다.
- 이름에 포함할 개념을 선택한다.
- 이름을 통해 나타낼 개념을 선택하는데, 개념은 도메인 별로 아주 많이 다르며 어떤 차원을 포함할 것인지 결정하는 것이 가장 중요할 수도 있다. 페이텔슨에 따르면 이름을 선택할 때 고려해야 할 주요 사항은 이름의 의도이고 의도는 개체가 어떤 정보를 보유하고 있으며 무엇을 위해 사용되는지를 나타내야 한다고함
- 각 개념을 나타낼 단어를 선택한다.
- 각 개념을 나타낼 단어를 선택하는 것이다. 종종 올바른 단어를 선택하는 것은 간단하며, 한 단어가 코드의 도메인에서 사용되거나 코드베이스 전체에서 사용되기 때문에 그 단어를 선택해야 하는 것은 명백할 때도 있다.
- 이 단어들을 사용하여 이름을 구성한다.
- 선택한 단어를 사용하여 이름을 구성하는 것으로 이름 지정 틀 중 하나를 선택하는 것에 해당한다.
모델의 단계가 반드시 순서대로 실행될 필요는 없다고 지적함.
요약
- 캐멀 케이스 같은 문법 규칙부터 코드베이스 내의 일관성까지, 좋은 이름에 대한 다양한 관점이 있다.
- 다른 차이가 없다면 스네이크 케이스로 작성된 변수보다 캐멀 케이스가 기억하기 쉽다. 하지만 사람들은 스네이크 케이스를 더 빨리 식별한다.
- 잘못된 이름이 있는 코드에서 버그가 발생할 가능성이 높다. 다만 이 둘 사이에 반드시 인과관계가 있는 것은 아니다.
- 다양한 형식의 변수명을 만드는 데 사용할 수 있는 이름 틀이 많이 있으므로 틀의 수를 줄이면 코드를 이해하는 데 도움이 된다.
- 페이텔슨의 3단계 모델(이름에 사용할 개념, 개념에 사용할 단어, 결합 방법)을 적용하면 고품질의 이름을 만들 수 있다.