8장 명명을 잘하는 방법
- 좋은 이름을 사용하면 LTM을 활성화하여 코드 도메인에 대해 이미 알고 있는 관련 정보를 찾을 수 있다.
- 반면, 나쁜 이름은 코드에 대한 잘못된 추측을 하게 하고 오개념을 유발할 수 있다.
- 문제를 해결하는 과정에서 이름이 생성되는 경우가 많은데, 이런 활동 중에는 인지 부하가 높은 상황이라 좋은 변수 이름을 생각해내기 어렵다.
1. 이름이 중요한 이유
- 이름을 짓는 것은 어려운 일이고, 이름을 짓더라도 다른 사람들과 같은 이름을 선택하는 것은 어렵다.
- 명명이 중요한 이유
- 이름은 코드베이스의 상당 부분을 차지한다
- 코드리뷰시에 프로그래머들도 이름에 관해 많이 언급을 하게 된다.
- 이름은 문서화의 가장 쉬운 형태다
- 이름이 표식 역할을 할 수 있다.
- 명명에 대한 다양한 관점
- 좋은 이름은 문법적으로 정의할 수 있다.
- camelCase와 같은 명명규칙
- 적당한 단어의 수
- 사전 등재 단어 사용 등
- 이름은 코드베이스 내에서 일관성이 있어야 한다.
- 초기 명명 관행은 지속적인 영향을 미친다.
- 식별자 이름의 품질에 관해서는 코드베이스의 크기에 연관관계가 없었다.
- 단일 코드베이스에서 시간이 지난다고 해서 명명 규약이 개선되지는 않는다.
- 즉, 프로그램 개발 초기에 만들어진 식별자의 품질이 계속 유지된다.
2. 명명의 인지적 측면
- 형식이 있는 이름은 STM을 돕는다.
- 코드베이스 전체에 걸쳐 일관된 명명 관행을 사용하도록 규정하면 청킹에 도움이 될 수 있다.
- 문법적으로 비슷한 이름들은 관련 정보가 매번 같은 방식으로 제시되기 때문에 이름을 읽는 동안 인지 부하가 낮아질 수 있다.
- 명확한 이름이 LTM에 도움이 된다.
- 변수이름은 감각 기억에 의해 처리되고 STM으로 전송된다.
- STM은 크기가 제한되어 있기 때문에 변수 이름을 단어별로 구분하려고 한다.
- 이름이 체계적일수록 변수명의 각 부분을 식별하기 쉽다.
- 변수이름을 처리할 때 작업 기억 공간에 정보를 제공하는 것은 STM뿐만이 아니다.
- LTM도 관련 사실을 검색한 후 검색된 정보를 작업 기억 공간으로 보낸다.
- 이 두 번째 인지 과정에서는 식별자 이름의 단어 선택이 중요하다.
- 변수 이름 또는 클래스에 올바른 도메인 개념을 사용하면 코드의 독자가 LTM에서 관련 정보를 찾는 데 도움이 될 수 있다.
- 변수 이름은 이해에 도움이 되는 다양한 유형의 정보를 포함할 수 있다.
- 코드의 도메인에 대해 생각할 때 이름이 도움이 됨
- 프로그래밍에 생각할 때도 도움
- 경우에 따라 변수에 LTM이 이미 알고 있는 규약에 대한 정보가 포함될 수도 있다.
- 이름의 품질 평가 시기
- 문제 해결에 몰두해 있을때는 높은 인지 부하를 겪기 때문에 좋은 변수이름을 생각할 여유강 ㅓㅂㅅ다.
- 그러므로 코딩 이외의 시간에 이름의 품질을 숙고하는 것이 바람직하다.
- 코드리뷰가 좋은 기회이다.
3. 어떤 종류의 이름이 더 이해하기 쉬운가?
- 완전한 단어로 구성된 식별자가 축약어보다 실제로 더 이해하기 쉽다.
- 변수의 이름이 길수록 기억하기 어렵고 기억하는 데 더 많은 시간이 걸린다.
- 길이 자체보다는 음절의 수가 많을수록 어려워진다.
- 이름이 길면 STM에서 더 많은 청크를 사용할 수 있고, 각 음절에 대해 청크를 만들 가능성이 높다.
- 따라서 코드를 이해하고 버그를 쉽게 찾기 위해서라면 명확한 의미의 단어를 사용해야 하는 반면, 기억을 잘 하기 위해서라면 간결한 약자를 사용해야 한다.
- 연구 결과 캐멀 케이스가 스네이크 케이스보다 좀 더 좋은 정확도를 가짐
4. 이름이 버그에 미치는 영향
- 나쁜 이름을 가진 코드에 버그가 더 많다.
- 명명 문제와 코드 품질 사이에 통계적으로 유의미한 연관성이 있다.
- 잘못된 명명 방식은 단지 읽고 이해하고 유지 보수하기 어려운 코드가 아니라 잘못된 코드일 가능성이 높다.
- 물론 버그 위치와 나쁜 이름의 위치 간의 상관관계가 반드시 그 둘의 인과관계를 의미하지는 않는다.
- 잘못된 이름 문제를 해결하는 것이 반드시 버그를 고치거나 예방하지는 않지만, 코드베이스를 검사하여 잘못된 이름이 발생하는 위치를 찾아내는 일은 코드를 개선하고 버그 발생 가능성이 있는 위치를 찾는 데 도움이 될 수 있다.
- 이름을 개선하면 간접적으로 버그가 줄어들거나, 더 나은 이름을 사용한 코드는 이해하기 쉽기 때문에 최소한 수정 시간이 단축될 수 있다.
5. 더 나은 이름을 선택하는 방법
- 이름 프레임워크
- 인지 부하와 LTM에 대해 알고 있는 것에 의하면 코드베이스 내에서 서로 다른 이름 틀을 사용하는 것은 바람직하지 않다.
- 인지 부하 측면에서 관련된 개념을 변수 이름 내에서 그리고 변수 이름내 다른 위치에서 찾는 것은 불필요한 외부 인지부하를 유발한다.
- 변수 이름이 비슷한 경우 동일한 이름 프레임워크를 사용하면 LTM이 관련 정보를 더 쉽게 찾을 수 있다.
- 유사한 이름 프레임워크를 사용하면 작업 기억 공간과 LTM에 큰 도움이 되기 때문에 각 코드베이스에서 사용할 수 있는 여러 가지 이름 틀을 미리 정해놓는 것이 좋다.
- 더 나은 변수명에 대한 페이텔슨의 3단계 모델
- 이름에 포함할 개념을 선택한다
- 각 개념을 나타낼 단어를 선택한다
- 이 단어들을 사용하여 이름을 구성한다