의도를 분명히 밝혀라
좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.
변수나 함수 그리고 클래스 이름은 아래의 질문에 모두 답할 수 있어야 한다.
- 변수(혹은 함수나 클래스)의 존재 이유는?
- 수행 기능은?
- 사용 방법은?
int d;
int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
위 변수 대신 아래 변수처럼 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다.
public List<int []> getThem(){
List<int []> list1 = new ArrayList<>();
for(int []x : theList){
if(x[0] == 4){
list1.add(x);
}
}
return list1;
}
복잡한 문장도 없고, 공백과 들여쓰기도 적당하며, 변수수와 상수는 총 다섯 개뿐이지만 코드가 하는 일을 짐작하기 어렵다.
이유는 코드 맥락이 코드 자체에 명시적으로 드러나지 않기 때문이다.
이를 고치면
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<>();
for(Cell cell : gameBoard){
if(cell.isFlagged()){
flaggedCells.add(cell);
}
}
return flaggedCells;
}
이처럼 작성할 수 있다. 코드의 단순성은 그대로이지만 더 명확해졌으며 함수가 하는 일을 이해하기 쉬워졌다.
이것이 좋은 이름이 주는 힘이다.
그릇된 정보를 피하라
- 본인에게는 완벽한 줄임말일지라도 독자에게는 그릇된 정보를 제공할 수 있다. 그러므로 단어를 줄이지 않는다.
- 여러 계정을 그룹으로 묶을 때 List로 명명하지 않는다. 개발자에게 List라는 단어는 특수한 의미다.
- 서로 비슷한 이름을 사용하지 않도록 주의한다. 차이를 알기 어렵다.
의미 있게 구분하라
getActiveAcoount();
getActiveAcoounts();
getActiveAcoountInfo();
이 프로젝트에 참여한 프로그래머는 어떤 함수를 호출해야 할까?
명확한 관례가 없다면 구분이 되지 않는다. 때문에 읽는 사람이 차이를 알 수 있게 이름을 지어야 한다.
클래스 이름
클래스 이름과 객체 이름은 명사나 명사구가 적합하다.
Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.
메서드 이름
메서드 이름은 동사나 동사구가 적합하다.
접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.
생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다.
Complex fulcreumPoint = new Complex(23.0) → 안 좋은 예시
Complex fulcreumPoint = Complex.FromRealNumber(23.0) → 좋은 예시
발음하기 쉬운 이름을 사용하라
발음하기 어려운 이름은 토론하기도 어렵다. 우리 두뇌에서 상당 부분은 단어라는 개념만 전적으로 처리한다.
그리고 정의상으로 단어는 발음이 가능하다. 그러므로 발음하기 쉬운 이름을 선택한다.
검색하기 쉬운 이름을 사용하라
한 글자 이름이나 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다.
예를 들어 숫자 7의 경우 7이 들어가는 파일 이름이나 수식이 모두 검색되기 때문이다.
마찬가지로 문자 e의 경우 가장 많이 쓰이는 문자이기 때문에 원하는 변수를 찾기 어렵다.
이런 관점에서 긴 이름이 짧은 이름보다 좋으며, 검색하기 쉬운 이름이 상수보다 좋다.
한 개념에 한 단어를 사용하라
예를 들어 Manager와 Controller는 근본적으로 같은 기능을 한다.
하지만 이름이 다르면 독자는 당연히 클래스도 다르고 타입도 다르다고 생각한다.
그렇기 때문에 일관성 있는 하나의 단어를 사용해야 한다.
'Book > 클린코드' 카테고리의 다른 글
[클린코드] 6장 객체와 자료구조 (0) | 2023.09.14 |
---|---|
[클린코드] 5장 형식 맞추기 (0) | 2023.09.11 |
[클린코드] 4장 주석 (0) | 2023.09.11 |
[클린코드] 3장 함수 (0) | 2023.09.11 |
[클린코드] 1장 깨끗한 코드 (0) | 2023.09.10 |