스터디/Clean Code

02. 의미 있는 이름

대인보우 2021. 8. 17. 16:56
반응형
클린 코드, 로버트 C. 마틴

이름을 잘 짓는 규칙


1) 의도를 분명하게 밝혀라

변수나 함수 그리고 클래스 이름은 다음과 같은 질문에 모두 답해야 한다.

- 변수의 존재 이유는?

- 수행 기능은?

- 사용 방법은?

주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

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

 

2) 그릇된 정보를 피하라

- List가 아니라면 Group을 사용해라

- 서로 흡사한 이름 사용하지 않기

 

3) 의미 있게 구분하라

이미 해당 변수가 있다고 해서

- 연속된 숫자를 덧붙이지 마라 (ex. a1, a2..)

- 불용어를 붙이지 마라 (ex. Product가 있으므로 ProductInfo)

 

4) 발음하기 쉬운 이름을 사용하라

 

5) 검색하기 쉬운 이름을 사용하라

이름 길이는 범위 크기에 비례해야 한다. (ex. s, j X / WORK_DAYS_PER_WEEK O)

 

6) 인코딩을 피하라

- 헝가리식 표기법을 사용하지 마라

- 멤버 변수 접두어를 붙이지 마라 (ex. m_dsc 등)

- 인터페이스 클래스와 구현 클래스(IShapeFactory X ShapeFactoryImp O)

 

7) 자신의 기억력을 자랑하지마라

- 문자 하나만 사용하는 변수 이름은 문제가 있다. (루프에서 반복횟수를 세는 i, j, k는 괜찮다.)

 

8) 클래스 이름

클래스 이름과 객체 이름은 명사나 명사구가 적합하다. (Customer, WikiPage, Account O | Data, Info X)

 

9) 메서드 이름

메서드 이름은 동사나 동사구가 적합하다. (postPayment, deletePage, save)

 

10) 기발한 이름은 피해라

 

11) 한 개념에 한 단어를 사용하라

- controller, manager, driver를 섞어 쓰면 혼란스럽다. 

- DeviceManager와 ProtocolController는 근본적으로 어떻게 다른가?

 

12) 말장난을 하지마라

- 다른 개념에 같은 단어를 사용하지마라

- 기존의 add는 기존 값 두 개를 더하거나, 이어서 새로운 값을 만든다. 새로 작성하는 메서드는 집합에 값 하나를 추가한다. 이 메서드를 add라 불러도 괜찮을까? ==> 기존 add 메서드와 맥락이 다르므로 X

 

13) 해법 영역에서 가져온 이름을 사용하라

- 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다.

 

14) 문제 영역에서 가져온 이름을 사용하라

- 적절한 '프로그래머 용어'가 없다면 문제 영역에서 이름을 가져온다.

 

15) 의미 있는 맥락을 추가하라

- 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.

- 예를 들어, fisrtName, lastName => addrFisrtName, addrLastname 등 분명하게 표현한다. 

16) 불필요한 맥락을 없애라

- 'Gas Station Deluxe' => 'GSD'로 변경 X

- 일반적으로 긴 이름이 짧은 이름보다 좋다. 다만 맥락이 분명해야 한다.

반응형