STUDY/Books

[Clean Code] 2장 : 의미 있는 이름

hyunah 2021. 5. 7. 21:55

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