Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions 8장/상범.md
Original file line number Diff line number Diff line change
@@ -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가 자연어에 가까움)
- 전치사 추가도 좋음