알아두면쓸데있는신기한잡학사전/독서일지

[클린코드] 4일차 - 의미 있는 이름 짓는 시간은 유의미하다.

대범하게 2023. 10. 27. 01:16
반응형

클린코드 4일차 - 의미 있는 이름 짓는 시간은 유의미하다.

클린코드 4일차 (p. 24~34(2장) )

2 의미 있는 이름

1. 그릇된 정보를 피하라

- 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면 명명에 조심해야한다. (accountList → accountGroup/Accounts)

- 프로그래머에게 List는 특수한 의미.

- 유사한 개념은 유사한 표기법 사용

- 일관성이 떨어지는 표기법은 그릇된 정보

 

2. 의미 있게 구분하라

- 연속적인 숫자를 덧붙은 이름 X

// 연속적으로 덧붙인 이름은 그릇된 정보를 제공하는 이름도 아니고, 아무런 정보를 제공하지 않음!!
public static void copyChar(char a1[], char a2[]){
	for (int i = 0; i < a1.length; i++){
    	a2[i] = a1[i];
    }
}

// 함수 인수 이름으로 source와 destination으로 바꾸니 한 눈에 보인다...!
public static void copyChar(char source[], char destination[]){
	for (int i = 0; i < source.length; i++){
    	destination[i] = source[i];
    }
}

 

- 불용어를 추가한 이름 X

- Product 클래스 / ProductInfo 클래스 / ProductData 클래스 → 차이를 구분할 수 있는가 ?

- InfoDataa, an, the와 마찬가지로 의미가 불분명한 불용어 

- 변수 이름에 variable 단어도 단연코 금물.

 

3. 발음하기 쉬운 이름을 사용하라

- genymdhms(generate date, year, month, day, hour, minute, second) = "젠 야 무다 힘즈"로 탄생 ..

- generationTimestamp

 

4. 검색하기 쉬운 이름을 사용하라

- 검색하기 어려운 이름(ex: 한 글자짜리 이름) 한 문자 이름은 간단한 메서드에서 로컬 변수일 때만.

- 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직

 

5. 인코딩을 피하라

6. 자신의 기억력을 자랑하지 마라

 

7. 클래스 이름

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

- Customer, WikiPage, Account (Good !!)

- Manager, Processor, Data, Info (Bad !!) + 동사 (Bad !!) 

 

8. 메서드 이름

- 메서드 이름과 동사, 동사구 적합

- postPayment, deletePage, save (Good !!)

- 접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙임.

 

10. 기발한 이름은 피하라

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

12. 말장난을 하지마라

 

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

- 기술 개념에는 기술 이름이 가장 적합한 선택

 

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

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

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

- 즉, 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다. 

- 관련 사례로 변수명을 '한글'을 이용해 코딩하는 경우를 보았다. (*  토스의 세종대왕 프로젝트)

https://tosspayments-dev.oopy.io/chapters/frontend/posts/hangul-coding-convention

 

 

추가적으로 기록할 개발팁

(*토스페이먼츠에서 공유한 "delete"와 "remove"의 차이)

 

- delete: 영구적으로 삭제. 더 이상 존재하지 않음.

- remove: 존재는 하지만, 내 눈에서 치움.

 

삭제를 한다는 개념에서 delete와 remove를 구분할 수 있다는 점에서 영어 공부를 다시 해야하나 싶기도 하고 ..

시스템 상 '삭제되었습니다.'로 유저에게 보여줘도 DB에서 완전 삭제가 아닌 state로 구분해놓으면 그건 또 "delete"는 아니고 ..

 

이 경우는 영구적으로 삭제/normal 삭제 에 대한 구분을 명확히 표현할 때 유용하게 사용할 수 있을 것 같다.

또한 위 내용을 언급해보자면 delete와 remove는 동사이기에 메서드의 이름을 명명할 때 사용한다고 볼 수 있다.

출처 @토스페이먼츠

 

느낀점

- 해당 클래스에 관련된 정보를 저장한다는 의미로 예를 들어 CompanyInfo로 작명하곤 했었는데 불용어를 지양해야겠다.

- delete와 remove의 차이. 영어 공부를 하자.