코딩을 하다 보면 변수, 함수, 클래스, 패키지 등 다양한 요소에 이름을 붙여야 할 상황이 빈번히 발생한다. 사실, 이름을 잘 지어주는 것만으로도 코드의 가독성과 유지 보수성이 크게 향상되곤 한다.
< 의도를 노출하는 이름 선택하기 >
이름을 지을 때 핵심은 '의도를 명확하게 표현'하는 것이다. 그럼 이게 무슨 말인지 예시를 통해 살펴보자.
int d; // 경과 시간(단위 : 날짜)
위의 코드에서 'd'라는 이름은 경과 시간을 의미한다는 것을 전혀 알려주지 않는다. 따라서 아래처럼 이름을 수정하면 더 좋을 것이다.
int elapsedTimeInDays;
이렇게 이름을 바꾸면 해당 변수가 어떤 정보를 담고 있는지 한 눈에 알 수 있게 된다.
< 예제로 보는 이름의 중요성 >
아래와 같은 함수가 있다고 가정해보자.
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for(int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
이 함수의 코드는 단순하지만 그 의도를 알기 어렵다. 이름이 그다지 도움이 되지 않기 때문이다.
만약 이 코드가 지뢰찾기 게임의 일부라고 하면, theList는 게임 판을 의미하고, x[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;
}
이처럼 이름만 바꾸어도 코드가 무엇을 하는지 이해하기 훨씬 쉬워진다. 심지어, Cell이라는 클래스를 만들어 isFlagged()라는 메서드를 사용하면 더욱 명확해진다.
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
flaggedCells.add(cell);
return flaggedCells;
}
단순히 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다. 바로 이것이 좋은 이름이 주는 위력이라고 볼 수 있다.
출처 : 출판사 인사이트북 / 클린 코드 / https://product.kyobobook.co.kr/detail/S000001032980
※저의 블로그에 있는 모든 참고 서적,강의 내용은 출판사,저자(혹은 편집자)에게 허락을 직접 맡고, 게시하는 글 입니다.
'Clean Code' 카테고리의 다른 글
함수를 만드는 규칙 (0) | 2023.06.27 |
---|---|
의미있는 이름③ : 효과적 검색과 인코딩 방지/클래스,메서드 이름 (0) | 2023.06.27 |
의미있는 이름② : 의미있게 구분하고, 발음이 쉽게 만들자 (0) | 2023.06.27 |