diff --git "a/8\354\236\245/\354\203\201\353\262\224.md" "b/8\354\236\245/\354\203\201\353\262\224.md" new file mode 100644 index 0000000..341ef8c --- /dev/null +++ "b/8\354\236\245/\354\203\201\353\262\224.md" @@ -0,0 +1,103 @@ +# 8장 명명을 잘하는 방법 + +좋은 이름을 사용하면 LTM을 활성화하여 코드 도메인에 대해 이미 알고 있는 관련 정보를 찾을 수 있고 + +나쁜 이름은 코드에 대한 잘못된 추측을 하게 하고 오개념을 유발할 수 있음 + +이름을 짓는 것은 중요하고 매우 어려움 => 보통 이름은 문제를 해결하는 과정에서 짓기 때문 + +이 과정은 작업 기억 공간의 부하가 심한 상태이므로, 이 상태에서 좋은 이름을 짓는 것은 부하를 더 가하는 일이기에 우리는 쉬운 이름을 선택하는 경향이 있다고함 + +> 요구사항에 맞는 코드 작성하면서 작은 단위로 명명하는게 쉽지 않을때가 많아서 공감 + +## 이름이 중요한 이유 + +- 이름은 코드베이스의 상당 부분을 차지 +- 코드 리뷰 시 이름의 역할 +- 이름은 문서화의 가장 쉬운 형태이다 + - 개발자는 문서를 읽기 위해 코드 밖으로 나가는 것을 피하고 싶어하므로, 코드 내의 주석문과 이름이 가장 많이 읽는 문서이다 +> 진짜 적극 공감 + +- 이름은 표식 역할을 할 수 있다 + +## 명명에 대한 다양한 관점 + +1. 버틀러 왈: 좋은 이름은 문법적으로 정의할 수 있다 + +명명 규약 목록중에 기억하고싶은 몇가지만 추렸습니다 + +- 약어는 원래의 명칭보다 더 자주 사용될 경우에만 사용해야 됨 +- 식별자에 사용되는 단어는 두개에서 네 개 사이여야 함 + +2. 알라마니스 왈: 이름은 코드베이스 내에서 일관성이 있어야한다 + +코드베이스에 거쳐 유사한 객체에 동일한 단어를 사용하면 LTM에 관련 정보를 축적할 수 있다 + +> 명명에서 일관성이 가장 중요하다 생각 + +## 초기 명명 관행은 지속적인 영향을 미친다 + +"프로그램 개발 초기에 만들어진 식별자의 품질이 계속 유지된다" 그러니 초기 단계에 좋은 이름 선택하는 데 특히 주의해야 됨 + +깃허브의 테스트 사용현황에서는 저장소에 새로 참여한 사람은 프로젝트의 지침을 읽기보다는 기존 테스트를 보고 수정하는 경우가 많다고 함 + +> 첫 프로젝트 삽을 뜬 프론트 개발자가 유지보수에 용이하지 않은 코드를 남발하고 퇴사했는데, 백엔드 개발자들과 외부 프리랜서 개발자들이 그 코드를 인계 받아 유지보수하는데 처음 짜여진 구조를 유지하고, 새로운 도메인도 그대로 만들더라구요 + + +## 명명의 인지적 측면 + +### 형식이 있는 이름은 STM을 돕는다 + +1. 버틀러 : 문법적으로 비슷한 이름 + +비슷한 이름들은 관련 정보가 매번 같은 방식으로 제시되기에 이름을 읽는 동안 인지부하가 적다 + +알라마니스 : 코드베이스 내에서의 일관성 + +청킹에 도움을 줄 수 있다 + +### 명확한 이름은 LTM에 도움이 된다 + +### 변수 이름은 이해에 도움이 되는 다양한 유형의 정보를 포함할 수 있다 + +- 코드의 도메인에 대해 생각할 때 도움이 됨 +- 프로그래밍 개념에 대해 생각할 때 도움이 됨 e.g. 트리, 리스트와 같은 개념 +- 경우에 따라 LTM이 이미 알고 있는 규약에 대한 정보가 포함될 수도 있음 e.g. i, j 등 루프의 카운터 + +=> 향후 코드를 읽을 사람의 STM, LTM에 도움이 될만한 변수 이름을 고려하면 이름을 선택할 때 도움이 될 수 있음 + +## 어떤 종류의 이름이 더 이해하기 쉬운가? + +### 축약할 것인가? 하지 않을것인가? + +코드를 이해하고 버그를 쉽게 찾기 위해서라면? 완전한 단어로 구성된 식별자를 사용하되, 기억을 잘하기 위해서라면? 간결한 식별자를 사용해야 함 + +이 둘 사이의 밸런스를 잘 잡는게 중요 + +### 스네이크 케이스? 캐멀 케이스? + +가능한 카멜 케이스 ㄱ ㄱ 이전 코드가 스네이크 케이스면 그걸로 가고, 일관성이 중요 + +## 더 나은 이름을 선택하는 방법 + +### 이름 틀 + +이름 틀은 변수명을 구성하는 단어들이 결합되는 패턴을 말힘 + +`max_benefit` or `max_benefit_per_month` or `benefits_per_month` 등 + +개발자들은 서로 다른 이름들을 사용하는 경향이 있었고, 이는 같은 코드베이스 내에서도 발생할 수 있음 + +하지만 같은 코드베이스에서는 같은 이름틀을 사용하는 것이 바람직 (작업 기억 공간과 LTM 관점에서) + +### 더 나은 변수명 선택을 위한 페이텔슨의 3단계 모델 + +1. 이름에 포함할 개념을 선택한다. +- 이름의 의도, 개체가 어떤 정보를 보유하고 있고 무엇을 위해 사용되는지 +2. 각 개념을 나타낼 단어를 선택한다 +- 코드베이스에서 주로 사용되는 단어를 선택 +- 여러 단어가 경쟁적일때 선택에 어려움이 있을 수 있는데, 프로젝트에서 사용되는 단어를 모은 어휘사전이 도움이 될 수 있음 +3. 이 단어들을 사용하여 이름을 구성한다 +- 이름 틀을 선택할 때는 코드베이스와 일치시키는 것이 중요 +- 자연어에 맞춰 이름 틀을 사용하는 것도 좋음 (points_max보단 max_points가 자연어에 가까움) +- 전치사 추가도 좋음