알아두면쓸데있는신기한잡학사전/독서일지

[클린코드] 3일차 - 의미 있는 이름은 어떻게 지을까?

대범하게 2023. 10. 25. 23:39
반응형

클린코드 3일차 - 의미 있는 이름은 어떻게 지을까?

클린코드 3일차 (p.13~23(1장) / 21~23(2장) )

2 의미 있는 이름

변수명에 대한 고찰 ... 적절한 의미의 변수명 짓기가 젤 어렵다.. 그래서 위 변수명이 뜻하는 바는 무엇일까 ..~

 

의도를 분명히 밝혀라

- 의도가 분명한 이름이 정말로 중요하다.

- 더 나은 이름이 떠오르면 개선해라. 다음 질문에 모두 답할 수 있는 이름이어야 한다. 존재 이유는? 수행 기능은? 사용 방법은?

// Bad
int d; // 경과 시간(단위: 날짜)

// Good
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

변수 d는 무슨 의도로 작성됐는지 모를 변수명이다.
n일 뒤에 보면 나도 모를 작명 말고 타인이 봐도 알 법한 작명이 필요하다.
측정하려는 값과 단위를 표현하는 이름이 필요!

 

// Bad : 코드가 하는 일을 짐작하기 어려움. (get하는 Them이 뭔데 .. 부터 시작 ..)
// 아래 Bad 코드는 독자가 정보를 아는 것과 모르는 것에 따라 난이도가 달라진다.
public List<int[]> getThem() {
    List<int[]> list1 = new ArrayList<int[]>();
    for (int[] x : theList) {
        if (x[0] == 4) {
            list1.add(x);
        }
    }
    return list1;
}

// Good : 지뢰찾기 게임을 만든다 !
// theList = 게임관 (gameBoard)
// 게임관에서 각 칸은 단순 배열로 표현
// 배열에서 0번째 값은 칸 상태를 뜻함 - 값 4는 깃발이 꽂힌 상태

public List<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
    for (int[] cell : gameBoard) {
        if (cell[STATUS_VALUE] == FLAGGED) 
            flaggedCells.add(cell);
    }
    return flaggedCells;
}

// Better than before
// int 배열을 사용하는 대신 클래스 사용 - Cell
// isFlagged라는 명시적인 함수 사용
public List<int[]> getFlaggedCells() {
    List<int[]> flaggedCells = new ArrayList<int[]>();
    for (Cell cell : gameBoard) {
        if (cell.isFlagged())  
            flaggedCells.add(cell);
    }
    return flaggedCells;
}

 

느낌점

최근 코드 리뷰를 받았을 때도 위(Better than before)에서 얘기한 것처럼 if문 내에서 조건처리보다 명시적인 함수로 빼는 방법을 사용을 권하셨다.. !