2. 의미있는 이름

풀어갈 나의 이야기·2023년 4월 27일
0

Clean Code

목록 보기
3/10
post-thumbnail

의미있는 이름

소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 지으면 여러모로 편하다. 이 장에서는 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다.

의도를 분명히 밝혀라

  • 의도가 분명하게 이름을 지으라.. 라고 말하기는 쉬움
    • 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많음
  • 변수나 함수 , 클래스 이름은 다음과 같은 질문에 답해야 한다.
    • 변수 (함수나 클래스)의 존재 이유는?
    • 수행기능은?
    • 사용방법은?
      • 위 대답을 못하면, 의도를 분명히 드러내지 않은것임.
int d; // 경과 시간 (단위: 날짜)

이름 d는 아무 의미도 드러나지 않는다. 경과 시간이나 날짜라는 느낌이 안든다. 측정하려는 값과 단위를 표현하는 이름이 필요하다.

int elapsedTimeInDays;
int daysSinceCreation;
...
...

의도가 드러나는 이름을 사용시 코드 이해와 변경이 쉬움

public List<int[]> getThem(){
    List<int[]> list1 = new ArrayList<int[]>();
    for (int[] x : theList)
        if (x[0] == 4)
            list1.add(x);
    return list1;
}

코드가 하는 일을 짐작하기 어려움, 코드 맥락이 코드 자체에 명시적으로 드러나지 않고 있음

  • 단 정보를 안다면?
    • theList 가 게임판이라면?
    • 지뢰찾기 게임이라면??
public List<Cell> getFlaggedCells(){
    List<Cell> flaggedCells = new ArrayList<Cell>();
    for (Cell cell : gameBoard)
        if (cell[STATUS_VALUE] == FLAGGED)
            flaggedCells.add(cell);
    return flaggedCells;
}

코드에 정보 제공을 충분히 하자

그릇된 정보를 피하라

  • 나름대로 널리 쓰이고 있는 의미가 있는 단어를 다른 의미로 사용하면 안된다.
  • 여러 계정을 그룹으로 묶을 때 실제 List가 아니라면 accountList와 같이 명명하지 않는다.
  • 서로 흡사한 이름을 사용하지 않도록 주의한다.
  • 유사한 개념은 유사한 표기법을 사용한다.
  • 소문자 L이나 대문자 O는 숫자 1이나 0과 혼동하기 쉬우니 주의한다.

실제 컨테이너가 List 인 경우라도 유형을 이름에 넣지 않는 편이 바람직하다.

의미 있게 구분하라

  • 동일 범위 안에서 다른 두 개념에 같은 이름을 사용하지 못한다고 철자를 틀리게 적지말자
    • klass 이런게 최악임..
  • 연속된 숫자를 덧붙이거나 불용어(noise word)를 추가하는 방식은 적절하지 못하다. 이름이 달라야 한다면 의미도 달라져야 한다.

나쁜 예시

public static void copyChars(char a1[], char a2[]) {
    for (int i = 0; i< a1.length; i++) {
        a2[i] = a1[i];
    }
}

좋은 예시

public static void copyChars(char source[], char destination[]) {
    for (int i = 0; i< a1.length; i++) {
        destination[i] = source[i];
    }
}
  • 불분명한 불용어는 사용하지 않아야 한다.
    • Info, Data 는 a, an , the 와 마찬가지로 의미가 불분명한 불용어임

발음하기 쉬운 이름을 사용하라

  • 사람들은 단어에 능숙함
  • 두뇌에서 상당 부분은 단어라는 개념만 전적으로 처리함.
    • 발음하기 어려운 이름은 토론도 어려움

나쁜 예시

class DtaRcrd102 {
    private Date genymdhms;
    private Date modymdhms;
    private final String pszqint = "102";
};

좋은 예시

class Customer {
    private Date generationTimeStamp;
    private Date modificationTimeStamp;
    private final String rdcordId = "102";
};
profile
깨끗한 스케치북 일수록 우아한 그림이 그려지법, 읽기 쉽고, 짧은 코드가 더 아름다운 법.. 또한 프로그래머의 개발은 구현할 프로그래밍이 아닌, 풀어갈 이야기로 써내려가는것.

0개의 댓글