반응형
클린코드 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문 내에서 조건처리보다 명시적인 함수로 빼는 방법을 사용을 권하셨다.. !
반응형
'알아두면쓸데있는신기한잡학사전 > 독서일지' 카테고리의 다른 글
[클린코드] 7일차 - 오류 보단 예외처리, 그리고 클린코드로 인한 중복 알레르기 (1) | 2023.10.31 |
---|---|
[클린코드] 6일차 - 좋은 함수를 위한 n가지 주의사항 (1) | 2023.10.30 |
[클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만. (1) | 2023.10.29 |
[클린코드] 4일차 - 의미 있는 이름 짓는 시간은 유의미하다. (2) | 2023.10.27 |
[클린코드] 2일차 - 장인정신 길들이기 및 클린코드 고생길 시작 (3) | 2023.10.25 |