IT/책

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

Terriermon 2021. 10. 25. 10:33

Clean Code  - 로버트 C. 마틴

2장, 의미 있는 이름

 

소프트웨어에서 이름: 변수, 함수, 인수, 클래스, 패키지, 소스파일, 디렉터리, jar, war, ear 등 이름을 많이 사용

➡ 이름을 잘 정하는 것이 중요하다.

 

 

1. 의도 밝히기

 

변수, 함수, 클래스 등 이름을 지을 때 이름에 의도를 담아야 함

 

🔗따로 주석이 필요하면 의도를 드러내지 못한 것

 

생각해봐야 할 질문
- 변수(or 함수 or 클래스)의 존재 이유는?
- 수행 기능은?
- 사용 방법은?

 

ex)

Bad Code

public List<int[]> getThem(){
 List<int[]> list1 = new ArrayLists<int[]>();
 for (int[] x : theList)
  if (x[0] == 4)
   list1.add(x);
  return list1;
}

- 변수의 의미가 명확하지 않음

- x[0]의 의미는? 4의 의미는? list1은 어떤 것을 담고 있는가?

 

 

Clean Code

이름을 명확하게 해서 사용하는 의미 밝히기

- 위와 같은 코드이지만, 확실하게 각 변수들이 어떤 의미를 가지고 있는지 파악할 수 있음

 

 

 

2. 잘못된 정보 피하기

 

- 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용❌

ex1) hp(직사각형 빗변), aix, sco ➡️ 본래 의미로 사용할 것

ex2) List: List 형식이 아니라면 잘못된 정보를 제공하는 것 ➡️ List 형식이 아닐 경우 Group, Acoounts 등으로 명명

 

- 흡사한 이름 사용❌

ex) XYZControllerForEfficentHandlingOfStrings와 XYZControllerForEffcientStorageOfStrings의 차이점은?

 

- 일관성 있는 표기법 사용

 

- L과 O 주의 ➡️ 글씨체를 바꿔서 해결

💡 네이버 D2의 CodingFont 추천

 

 

 

3. 의미 있는 구분

 

- 동일한 범위 안에서 다른 두 개념에 같은 이름을 사용하지 못함

ex) class를 사용하지 못해 klass 사용 등 의미 없는 철자를 바꿔서 구분

 

- 연속적인 숫자(a1, a2, a3, ...): 정보 제공❌

 

- 불용어(중복)를 추가한 이름: 정보 제공❌

ex) ProuctInfo와 ProductData는 개념을 구분하지 않고 이름만 다르게 사용함

 

 

 

4. 발음하기 쉬운 이름

5. 검색하기 쉬운 이름

 

- 이름길이는 범위 크기에 비례해야 함

ex) const int WORK_DAYS_PER_WEEK = 5; 라는 변수는 5라는 상수를 검색할 때보다 쉽게 검색이 가능함

 

 

6. 인코딩❌

 

- 발음하기 어려움, 오타 발생이 쉬움

 

- 강한 타입(strongly-typed)인 자바의 경우, 클래스 이름을 바꾸어도 타입 이름을 바꾸지 않아도 됨

ex) PhoneNumber phoneString;

 

- 멤버 변수 접두어: 클래스와 함수는 접두어가 필요 없을 정도로 작아야 함

ex) 기존에는 멤버 변수에는 m_ 접두어를 붙임

 

- 멤버 변수를 다른 색상으로 표시하는 IDE 사용

 

- 인터페이스 클래스와 구현 클래스: 구현 클래스 이름을 인코딩

ex) ShapeFactory(인터페이스 클래스) ShaeFactoryImp(구현 클래스)

 

 

7. 기억력

 

- 명료함

 

- 실제 아는 이름으로 변수 이름을 변환하면 좋지 않은 변수 이름

 

- 문자 하나만 사용하는 변수의 경우 i, j, k까지만 허용

why? 루트 범위가 매우 작은 경우, 반복 횟수 변수를 주로 i, j, k를 이용하기 때문

 

 

 

8. 클래스 이름

 

- 클래스 이름과 객체 이름은 명사나 명사구가 적합

ex) 적합한 이름: Customer, WikiPage, Account, AddressParser

↔ Manager ,Processor, Data, Info 등의 단어는 좋지 않음

 

 

 

9. 메서드 이름

 

- 메서드 이름은 동사나 동사구가 적합

ex) 적합한 이름: postPayment, deletePage, save

 

- 접근자(Accessor) - get , 변경자(Mutator) - set , 조건자(Predicate) - is는 javabean 표준에 따라 작성

ex) getName(), setName("Mike"), isPosted()

 

- 생성자 중복정의(overload): 정적 팩토리 메서드 사용

ex) Complex fulcrumPoint = Complex.FromRealNumber(23.0);

Comple fulcrumPoint = new Complex(23.0); --> 해당 코드를 더 선호

 

 

 

10. 기발한 이름❌

11. 한 개념에 한 단어 사용

 

- fetch, retrieve, get 등 같은 개념에 여러 단어 사용 시 혼란스러울 수 있음

 

- 일관성 있는 이름 사용

 

 

 

12. 한 단어를 두 가지 목적으로 사용❌

 

- 일관성 있는 목적

ex) add, insert, append ➡ 비슷한 뜻이지만 각각 다른 목적을 가지고 사용

 

 

13. 해법 영역에서 가져온 이름 사용

 

- 프로그래머 용어(전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등) 사용 ➡ 코드를 읽는 사람도 프로그래머이기 때문

 

 

 

14. 문제 영역에서 가져온 이름 사용

 

- 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어서 파악 가능하도록 함

 

 

 

15. 의미 있는 맥락 추가

 

ex) 주소를 나타내는 변수

Bad Code

firstName, lastName, street, houseNumber, city, state, zipcode ...

 

Clean Code

addrFirstName, addrLastName, addrStreet, addrHouseNumber, addrCity, addrState, addrZipcode ...

 

- 의미를 가지는 접두어를 포함하여 맥락을 분명하게 함

 

 

 

16. 불필요한 맥락❌

 

- Gas Station Deluxe 애플리케이션 작성 시 모든 클래스 이름을 GSD로 시작하는 것은 불필요한 맥락을 추가하는 것

 

- 의미가 분명한 경우에는 짧은 이름을 사용

 

 

'IT > ' 카테고리의 다른 글

[Clean Code] 7장, 오류 처리  (0) 2021.11.07
[Clean Code] 6장, 객체와 자료 구조  (0) 2021.11.05
[Clean Code] 5장, 형식 맞추기  (0) 2021.10.30
[Clean Code] 4장, 주석  (0) 2021.10.30
[Clean Code] 3장, 함수  (0) 2021.10.28