본문 바로가기
개발/리뷰

[클린코드 리뷰] 2. 의미 있는 이름을 사용해야 한다.

by -master 2022. 11. 6.

 

1. 의도를 분명히 밝혀라

 

나쁜 코드 :

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

이름 d는 아무 의미도 드러나지 않는다. 경과시간 날짜 라는 느낌이 안든다.

 

 

좋은 코드:

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeIndays;

의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다.

 

 

 

 

 

지뢰찾기 게임을 만든다고 가정하자.

 

나쁜코드 : 

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

코드가 하는 일을 짐작하기 어렵다. 왜일까? 복잡한 문장은 없다. 공백과 들여쓰기도 적당하다. 

문제는 코드의 단순성이 아니라 코드의 함축성이다. 다시 말해 코드 맥락이 코드 자체에 명시적으로 드러나지 않는다. 

 

게임판인 theList를 gameBoard로 바꿔보자.

게임판에서 각 칸은 단순 배열로 표현한다. 배열에서 0번째 값은 상태를 뜻한다.

값 4는 깃발이 꽂힌 상태를 가리킨다. 각 개념에 이름만 붙여도 코드가 상당히 나아진다.

 

좋은 코드 :

public List<Cell> getFlaggedCells() {
  List<Cell> flaggedCells = new ArrayList<Cell>();
  for (Cell cell : gameBoard)
    if (cell.isFlagged())
      flaggedCells.add(cell);
  return flaggedCells;
}

위에서 보듯 코드의 단순성은 변하지 않았다. 연산자 수와 상수의 수는 나쁜 코드와 동일하며, 들여쓰기 단계도 동일하다. 그런데도 코드는 더욱 명확해졌다. 한걸음 더 나아가 int 배열을 사용하는 대신, 칸을 간단한 클래스로 만들었다. isFlagged라는 좀 더 명시적인 함수를 사용했다. 

 

이렇게 단순히 이름만 고쳐줬는데도 함수가 하는 일을 이해하기 쉬워졌다 바로 이것이 좋은 이름이 주는 위력이다.

 

 

 

출처 : 클린코드(애자일 소프트웨어 장인 정신), 로버트 C.마틴

반응형

댓글