개발자가 자주 고민하는 것 중
"의미 있는 이름"
✔️ 의도(존재 이유, 기능, 사용 방법)를 분명히 하라
✔️ 검색하기 쉬운 이름 사용 (+ 자동완성 기능)
ex) 긴 이름이 짧은 이름보다 검색하기 좋다.
예시 코드
vector<int*> getData() {
vector<int*> ret_list;
for (int* x : theList) {
if (x[0] == 4) {
ret_list.push_back(x);
}
}
return ret_list;
}
Q1) theList는 어떤 리스트
Q2) x[0]이 갖는 의미?
Q3) 값 4는 무슨 의미?
Q4) 반한 리스트(ret_list) 활용처?
배경지식이 없는 한 의도를 정확히 알기 어렵다.
물론 어느정도 Background는 필요하지만
어느정도 무슨 로직인지 알 수 있어야 한다.
vector<Cell> getFlaggedCells() {
vector<Cell> flaggedCells;
for (const auto& cell : gameBoard) {
if (cell.isFlagged()) {
flaggedCells.push_back(cell);
}
}
return flaggedCells;
}
✔️ 주석을 작성해야한다면 다시 고민해보자.
✔️ 한글자만 사용하는 변수 이름은 좋지 못하다.
but) 횟수 세기 위한 i, j, k 는 어느정도 묵인된다.
예시 코드
// before
int d; // 경과 시간(단위: 날짜)
// after
int elapsedTimeInDays;
int daysSinceModification;
int daySinceCreation;
단순히 "d" 라고만 표시하면
변수가 사용되는 곳에서 어떤 의도인지 확인하기 어렵다.
변수명 자체만으로 의도가 파악되도록 하자.
예시 코드
// before
void copyChars(char* a1, int l, char* a2) {
for (int i = 0; i < l; i++) {
a2[i] = a1[i];
}
}
// after
void copyChars(const char* src, const int len, char* dst) {
for (int i = 0; i < len; i++) {
dst[i] = src[i];
}
}
a1과 a2 중에서 어떤 것이 source/destination 인지 파악하기 어렵다.
어느정도 익숙한 순서가 있지만
명확한 의미를 가진 변수로 처리하는게 좋다.
✔️ 널리 쓰이는 단어는 의미를 잘못 이애할 수 있다.
int hp = 3;
Q) 게임 캐릭터 체력 HP(Health Point)?
Q) 컴퓨터 제조사 hp?
Q) 직각삼각형의 빗변 hypotenuse?
✔️ 발음하기 어려운 이름은 논의하기도 어렵다.
// before
class DtaRcrd {
Date genymdhms;
Date modymdhms;
const string pszqint = "102";
};
// after
class Customer {
Date generationTimestamp;
Date modificationTimestamp;
const string recordId = "102";
};
✔️ 비슷한 의미는 하나의 단어로 통일
Student 정보를 "가져오는" 명칭을 다양하게 작성할 필요 없다.
어떤 것이든 1개로 통일해서 쓰는 것이 가독성에 좋다.
ex) getStudent, fetchStudent, retrieveStudent
✔️ CS / PS 영역에서 사용되는 이름 활용
코드를 보는 것은 개발자의 몫이기 때문에
OS, 디자인패턴 등에서 나오는 개념을 활용하는 것이 이해하기 좋다.
ex) JobQueue, JobSchduler, TalbeVisitor
✔️ CS/PS 영영익 마땅치 않다면 Domain에서 사용되는 이름을 활용하자.
ex) Die, Plane, Block, Page
ex) seller, buyer
✔️ 첫글자 대/소문자, 언더바 표기법 등은 소속마다 다르다.
✔️ 객체 / 클래스 이름 명사나 명사구로 작성
ex) Customer, JsonParser, Account
✔️ 함수명은 동사나 동사구로 작성
ex) save, deletePage, doGet
✔️ 접근자 / 변경자 / 조건자는 get / set / is 접두사로 활용
ex) getName, setName, isChanged
'까망 동네 > 클린 코드' 카테고리의 다른 글
[클린코드] 객체와 자료구조 (0) | 2022.07.19 |
---|---|
[클린코드] 형식 (Format) (0) | 2022.07.18 |
[클린코드] 함수 Function (0) | 2022.07.18 |
[클린코드] 주석 Comment (0) | 2022.07.18 |
클린 코드(Clean Code)란? (0) | 2022.07.17 |
댓글