클린 코드(Clean Code) - 2장 의미 있는 이름

Muzi·2023년 1월 3일
0

Clean Code

목록 보기
2/14

의미 있는 이름

1. 의도를 분명히 밝혀라

좋은 이름을 짓는데는 시간이 오래걸린다,
그러나 좋은 이름으로 절약하는 시간이 더 많다는 것을 기억하자.

// 변경 전
public List<int[]> getThem(){
  List<int[]> list1 = new ArrayList<int[]>();
  for(int[] x : theList) // theList에 무엇이 들었는가?
    if(x[0] == 4) // theList의 0번째 값이 왜 중요한가? 값4는 무엇을 의미하나?
      list1.add(x);
  return list1;
}

/* 변경 1
- theList -> gameBoard
- 상태 값 상수로 변경
*/ 
public List<int[]> getFlaggedCells(){
  List<int[]> flaggedCells = new ArrayList<int[]>();
  for(int[] cell: gameBoard)
    if(cell[STATUS_VALUE] == FLAGGED)
      flaggedCells.add(cell);
  return flaggedCells;
}

/* 변경 2
- 각 칸을 Cell 클래스로 표현
- Cell 필드 값 flagged 확인 메서드로 변경
- 코드의 단순성은 변하지 않았다 그럼에도 코드는 더욱 명확해졌다.
- 단순히 이름만 고쳤을 뿐인데 함수가 하는 일을 이해하기 쉬워졌다. 
*/
public List<Cell> getFlaggedCells(){
  List<Cell> flaggedCells = new ArrayList<Cell>();
  for(Cell cell: gameBoard)
    if(cell.isFlagged())
      flaggedCells.add(cell);
  return flaggedCells;
}

2. 그릇된 정보를 피하라

  • 적합하지 않은 단어를 사용하지 말자
int hp = 3; // hp가 체력을 의미하는지,, 유닉스 플랫폼인지,, 헷갈린다

/*
- 실제 list가 아닌데 accountList라는 변수를 쓰지말자
- 물론  실제 컨테이너가 list라 할지라도 변수명에 타입 이름을 넣지 않는 편이 바람직하다
*/
  • 흡사한 이름 사용을 지양하자 (차이를 알아채기 어렵다)
/*
XYZControllerForEfficientHandlingOfStrings와
XYZControllerForEfficientStorageOfStrings는 겁나게 비슷해 구별하기 어렵다
*/

3. 의미 있게 구분하라 (읽는 사람이 차이를 알도록)

// info data 차이가 있나..
String productInfo;
String productData;

// 둘다 돈 아닌가
Long moneyAmount;
Long money;

4. 발음하기 쉽고 검색하기 쉬운 이름을 사용하라

  • 대화가 가능한 코드를 쓰자 (genymdhms는 발음도 하기 힘들다)
  • 그냥 문자랑 숫자를 쓸게 아니라 상수화 하자

5. 인코딩을 피하라

// 변수명에 타입이 들어가면 타입이 변경되어도 이름이 바뀌지않아 착오를 일으키기 쉽다
PhoneNumber phoneString;

// 인터페이스와 구현 클래스 둘중 하나를 인코딩한다면 구현 클래스
ShapeFactory // interface
ShapeFactorImpl // 구현 클래스

6. 클래스 이름과 메서드 이름

// 클래스 이름은 명사나 명사구가 적합
Customer customer;
WikiPage wikiPage;
Account account;

// 메서드 이름은 동사나 동사구가 적합
String name = employee.getName();
paycheck.isPosted()

7. 한 개념에 한 단어를 사용하라

  • 값을 가져오는 메서드인데 어떤건 get 어떤건 fetch 어떤건 retrieve로 하지말고 통일하자

8. 불필요한 맥락을 없애라

  • 고급 휘발유 충전소 프로젝트에 모든 클래스 이름이 GSD로 시작할 이유는 없다
  • 의미가 분명한 경우에는 짧은 이름이 긴 이름보다 좋다

마치며

변수에 타입이름을 넣는다거나, 단순히 tmp라는 변수를 사용한다거나, get과 retreieve를 같이쓰는 등의 실수를 많이 범한 나여서 2장은 특히 주의 깊게 봤다.. 이후 개발에서는 이런 실수는 줄여야겠다

profile
좋아하는걸 열심히

0개의 댓글