프로그래머의 뇌 (펠리너 헤르만스 지음)
📍목차
1장 | 코드 더 잘 읽기
1. 코딩 중 겪는 혼란에 대한 이해
2. 신속한 코드 분석
3. 프로그래밍 문법 빠르게 배우기
4. 복잡한 코드를 읽는 방법
2장 | 코드에 대해 생각하기
5. 코드를 더 깊이있게 이해하기
6. 코딩 문제해결을 더 잘하려면
7. 생각의 버그
3장 | 좋은 코드 작성하기
8. 명명을 잘하는 방법
📍이름이 중요한 이유
✅식별자에는 타입, 변수, 메서드, 함수 등이 있으며, 식별자 이름이 중요한 이유는 대표적으로 4가지가 있다
1. 이름은 코드베이스의 상당 부분을 차지
예) 200만 줄의 코드에서 토큰의 33%, 문자열의 72%가 식별자에 해당
2. 코드 리뷰 시 이름의 역할
- 코드 리뷰 때도 식별자 이름이 자주 언급됨
- 평균적으로 코드 리뷰 4건 중 1건이 이름에 대한 언급을 포함
3. 이름은 문서화의 가장 쉬운 형태
- 이름 자체로도 정보를 전달하는 문서 역할을 한다
- 코드 공식 문서로 이동하는 것 대신 코드베이스의 정보 전달 기능
4. 이름이 표식 역할을 할 수 있음
- 변수 이름은 주석 외에도 코드를 이해하는데 도움이 되는 중요한 표식임
✅버틀러의 명명 규칙 알아보기
1. 사전 등재 단어
- 식별자의 약어는 원래 명칭보다 더 자주 사용될 경우에만 사용해야 한다
bad case) page_countr <- countr 라고 잘 쓰이지 않음
2. 단어의 수
- 식별자에 사용되는 단어의 수는 4개를 초과하면 안된다
bad case) page_counter_converted_and_normalized_value <- 6개의 너무 많은 단어 사용됨
3. 열거형(enum) 식별자 선언순서
- 별다른 이유가 없다면, 열거형 타입은 알파벳 순으로 선언되어야 한다
bad case) CardValue = { ACE, EIGHT, FIVE, FOUR, JACK, KING } <- 이 경우는 카드 점수 높은 순 또는 낮은 순이 바람직
4. 식별자 타입
- 식별자 이름에 타입 정보를 나타내지 말것
- TypeScript의 경우, 변수명 대신 타입으로 지정하면 됨
// bad case
let intPageCounter;
// good case
let pageCounter: number = 0;
5. 숫자를 나타내는 식별자 이름
- 식별자는 숫자만을 나타내는 단어나 수를 사용하면 안됨
bad case) FIFTY
📍명명의 인지적 측면
✅규칙적인 명명규칙은 STM(+ LTM)을 돕는다
- 문법적으로 비슷한 이름 => 이름(식별자)을 처리할 때 인지 부하가 낮음
예) nmcntrlst 보다 name_counter_list 가 쉽게 이해할 수 있다
- 코드베이스 내에서의 일관성 => 청킹을 지원 (LTM에 쉬운 저장)
✅변수 이름이 코드 이해에 도움을 줄 수 있음
1. 코드의 도메인에 대해 생각할 때
예) 쇼핑몰 앱에서 customer, cart 등의 변수를 사용
2. 변수에 LTM이 이미 알고 있는 규약에 대한 정보가 포함될 수 있다
예) i, j 등의 변수를 중첩 loop문에서 사용
📍어떤 종류의 이름이 더 이해하기 쉬운가?
✅축약어 vs 원래 단어
축약어를 적절하게 사용하는 것이 좋다
- 원래 단어를 사용할수록 버그를 19% 더 발견
- 다만, 변수 이름이 길수록(음절의 수가 많을수록) 기억하기 어려움
✅1글자를 변수로 사용하는 것
코드를 읽을 때 편견을 부여할 수 있다
예) x, y => 좌표를 연상시킴
✅카멜 케이스 vs 스네이크 케이스
카멜 케이스가 청킹(기억) 및 의미 파악에 더 유리하다
- 카멜 케이스와 스네이크 케이스 중에서 선택이 가능한 경우라면, 카멜 케이스를 선택하는 것이 좋다
- 스네이크 케이스는 더 빨리 식별할 수 있긴 하다
📍이름이 버그에 미치는 영향
✅나쁜 이름을 가진 코드에 버그가 더 많다
좋은 이름을 사용하면,
- 개발자의 인지 부하를 낮춰 유지 보수가 쉬워지고
- 버그 발생 가능성을 낮출 수 있다
📍더 나은 이름을 선택하는 방법
✅Name Mold(이름 틀) : 변수 명명 규칙과 비슷한 개념
예) 한 사람이 매달 최대로 받을 수 있는 혜택을 어떻게 이름붙일까?
- max_benefit
- max_benefit_per_month
- benefits
- max_month_benefit
...
개발자들이 자연스럽게 같은 변수명을 사용하는 경우는 매우 드물지만, 어느정도 비슷한 변수명을 이해하는 것으로 나타났다
- 이름 틀은 개발자들의 인지 부하를 낮추는 효과를 가짐
- 또한 LTM에서 관련 정보를 더 빠르게 인출 가능
- 따라서 이름 틀을 최소로 줄이고 공통화하는 것이 좋다
✅더 나은 변수명을 위한 3단계 모델
1. 이름에 포함할 개념을 선택
- 주석문으로 별도로 표현한 개념을 변수명으로 흡수
2. 각 개념을 나타낼 단어를 선택
- 프로젝트 어휘 사전을 구축
3. 이 단어들을 사용하여 이름을 구성
- 영어 어법에 맞게 자연스럽게 구성
예) points_max 대신 max_points 사용
indexOf 또는 elementAt 처럼 전치사를 추가