본문 바로가기
까망 동네/클린 코드

[클린코드] 의미 있는 이름

by 까망 하르방 2022. 7. 17.
반응형

개발자가 자주 고민하는 것 중

"의미 있는 이름"

 

📌 프로그래머가 가장 힘들어 하는 것은?

 

프로그래머가 가장 힘들어 하는 것은?

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, fetchStudentretrieveStudent

 

 

✔️ CS / PS 영역에서 사용되는 이름 활용

코드를 보는 것은 개발자의 몫이기 때문에

OS, 디자인패턴 등에서 나오는 개념을 활용하는 것이 이해하기 좋다.

ex) JobQueue, JobSchdulerTalbeVisitor

 

 

✔️ CS/PS 영영익 마땅치 않다면 Domain에서 사용되는 이름을 활용하자.

ex) Die, Plane, BlockPage

ex) sellerbuyer

 

 

✔️ 첫글자 대/소문자, 언더바 표기법 등은 소속마다 다르다.

📌 네이밍 컨벤션 (Naming Convention)

 

네이밍 컨벤션 (Naming Convention)

Naming Convention은 언어마다 권장하는 것과 팀 내부에서 사용하는 방법이 다를 수 있다. 하지만 하나의 프로젝트에서 여러 Case가 섞이면 가독성이 떨어지기 때문에 최대한 정해진 Rule을 준수할 필

zoosso.tistory.com

 

 

✔️ 객체 / 클래스 이름 명사나 명사구로 작성

ex) CustomerJsonParserAccount

 

✔️ 함수명은 동사나 동사구로 작성

ex) savedeletePagedoGet

 

✔️ 접근자 / 변경자 / 조건자는 get / set / is 접두사로 활용

ex) getName, setNameisChanged

 

 

📌 클린 코드(Clean Code)란?

 

클린 코드(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

댓글