Clean Code 스터디 내용 정리; 2장 의미 있는 이름
변수는 물론이고 함수, 클래스와 페키지, 소스 파일, 디렉터리 등에 이름을 붙일 때 사용할 수 있는 이름 잘 짓는 간단한 규칙
을 소개한다.
옳은 정보와 분명한 의도를 담는다.
1. 변수나 함수, 클래스의 이름은 그것에 대한 정보를 담아야 한다.
- 따로 존재 이유와 수행 기능, 사용 방법 등에 대한 주석이 필요하지 않을 정도로 이름에 의도를 분명히 드러낸다.
- 대다수의 이름은 그 자체로 의미가 분명하지 않으므로,
클래스, 함수, 이름 공간
에 넣어서 맥락을 부여한다. - 마땅치 않다면 마지막 수단으로
접두어
를 붙인다. - 생성자를 중복정의하는 경우에는
정적 팩토리 메소드
를 사용해 메서드 이름으로 인수를 설명한다.
int d // (x)
int daysSinceCreation // (o)
..
Complex fulcrumPoint = new Complex(23.0); // (x)
Complex fulcrumPoint = Complex.FromRealNumber(23.0); // (o)
String street, city, state, zipcode; // (x)
String addrStreet, addrCity, addrState, addrZipcode; // (△)
..
class Address {
String street;
String city;
String state;
String zipcode;
} // (o)
2. 이름에 그릇된 정보를 담아서는 안 된다.
- 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해서는 안 된다.
- 일관성이 떨어지는 방식으로 표기해서는 안 된다. (유사한 개념은 유사한 표기법을 사용)
- 의미가 분명하다면 이름에 불필요한 맥락을 굳이 추가하지 않는다.
int hp // hp-ux로 널리 쓰임 (x)
int hypotenuse // (o)
..
Vector accoutList // 실제로는 List가 아님 (x)
Vector Accounts // (o)
3. 이름과 개념은 일대일 대응이어야 한다.
- 다른 개념이라면 다른 단어를 사용해야 하고, 같은 개념이라면 여러 이름으로 불러서는 안 된다.
- 이름이 다르다면 의미 역시 달라야 하며 의미가 다르다는 것이 이름에서 드러나야 한다.
- 의미없는 숫자나 단어를 덧붙여서 이름이 다름에도 의미가 어떻게 다른지 알 수 없게 만들어서는 안 된다.
getActiveAccount();
getActiveAccountInfo(); // 두 함수가 하는 일이 구분되지 않음 (x)
..
copyChars(char arr1[], char arr2[]) // (x)
copyChars(char source[], char destination[]) // (o)
명료하고 이해하기 쉽게 만든다.
1. 한 번에 파악할 수 있게 한다.
- 이름에 굳이 변수, 클래스, 함수 등의 유형이나 범위 정보까지 끼워넣지 않는다.
- 발음하기 어려운 이름은 이야기하기가 어려우며 한 번에 이해하기도 어려우므로 피한다.
Date genymdhms; // (x)
Date generationTimestamp; // (o)
..
String m_dsc; // (x)
String description; // (o)
2. 다른 프로그래머가 쉽게 이해할 수 있게 한다.
- 관행을 따른다. 클래스 이름과 객체 이름은 명사나 명사구를, 메서드 이름은 동사나 동사구를 쓰고, 접근자나 변경자는 앞에 get, set, is를 붙인다.
- 자신만 아는, 혹은 특정 집단에서만 사용하는 농담을 담은 독특한 이름은 피한다.
- 적절한 프로그래머 용어가 있다면 해법 영역에서 이름을 가져온다.
- 적절한 프로그래머 용어가 없거나 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져온다.
string name = employee.getName(); // (o)
..
HolyHandGrenade() // (x)
DeleteItems() // (o)
언제든 더 나은 이름이 떠오른다면 주저말고 변경하자. 단기적 효과는 물론, 장기적인 이익도 보장한다.
'STUDY > Books' 카테고리의 다른 글
[Clean Code] 6장 객체와 자료 구조 (0) | 2021.05.21 |
---|---|
[Clean Code] 5장 형식 맞추기 (0) | 2021.05.18 |
[Clean Code] 4장 주석 (0) | 2021.05.16 |
[Clean Code] 3장 : 함수 (0) | 2021.05.11 |
[Clean Code] 1장 : 깨끗한 코드 (0) | 2021.05.05 |