개발자가 자주 고민하는 것 중
"의미 있는 이름"
프로그래머가 가장 힘들어 하는 것은?
IT 혹은 SW 업계에 있다보면 가끔 "프로그래머가 가장 힘들어 하는 것"이 무엇일까? 물론 개인 역량, 역할에 따라 비중은 달라질 수 있지만 아래 항목들이지 않을까 생각이 든다. ① 이름 짓기 코
zoosso.tistory.com
✔️ 의도(존재 이유, 기능, 사용 방법)를 분명히 하라
✔️ 검색하기 쉬운 이름 사용 (+ 자동완성 기능)
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
✔️ 첫글자 대/소문자, 언더바 표기법 등은 소속마다 다르다.
네이밍 컨벤션 (Naming Convention)
Naming Convention은 언어마다 권장하는 것과 팀 내부에서 사용하는 방법이 다를 수 있다. 하지만 하나의 프로젝트에서 여러 Case가 섞이면 가독성이 떨어지기 때문에 최대한 정해진 Rule을 준수할 필
zoosso.tistory.com
✔️ 객체 / 클래스 이름 명사나 명사구로 작성
ex) Customer, JsonParser, Account
✔️ 함수명은 동사나 동사구로 작성
ex) save, deletePage, doGet
✔️ 접근자 / 변경자 / 조건자는 get / set / is 접두사로 활용
ex) getName, setName, isChanged
클린 코드(Clean Code)란?
💻 클린 코드 (Clean Code)? • 프로그래밍을 모르는 사람도 한눈에 읽히는 코드 (가독성) • 다른 사람이 수정하기 쉬운 코드 • 한 가지 일에 집중하는 코드 • 중복이 적은 코드 • 테스트가
zoosso.tistory.com
'까망 동네 > 클린 코드' 카테고리의 다른 글
[클린코드] 객체와 자료구조 (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 |
댓글