Clean Code & Refactoring

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

유자맛바나나 2021. 11. 27. 04:17

[Clean Code 시리즈 포스팅]

[Clean Code] 1장. 깨끗한 코드: Clean Code

[Clean Code] 2장. 의미 있는 이름 : Meaningful Names (Now)

[Clean Code] 3장. 함수 : Functions

[Clean Code] 4장. 주석 : Comments

[Clean Code] 5장. 형식 맞추기 : Formatting

[Clean Code] 6장. 객체와 자료구조 : Objects and Data Structures

[Clean Code] 9장. 단위 테스트 : Unit Tests

 

의도를 분명히 밝혀라

  • 의도가 분명한 이름은 정말로 중요하다. 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.
  • 프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.
  • 변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야한다.
    ★ 변수(혹은 함수나 클래스)의 [존재 이유 / 수행 기능 / 사용 방법] 은? 
    ★ 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

 

의미 있게 구분하라

  • 연속된 숫자를 붙인 이름(a1, a2, ..., aN)은 의도적인 이름과 정반대
  • Info, Data, a, an, the 등은 의미가 불분명한 noise word. 예를 들어, ProductInfo와 ProductData는 개념을 구분하지 않은 채 이름만 달리한 경우다.

 

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

  • 예를 들어 "e"라는 이름의 변수를 지었을 때 해당 변수를 찾기 위해 "e"를 검색한다면 e를 포함한 수없이 많은 코드가 검색될 것이다.
  • 이런 관점에서 긴 이름이 짧은 이름보다 좋다.

 

클래스 , 객체에 적합한 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 동사는 사용하지 않는다.
    예) Customer, AddressParser

 

메서드에 적합한 이름

  • 메서드 이름은 동사나 동사구가 적합하다.
    예) save, deletePage
  •  접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean 표준에 따라 get, set, is를 붙인다.
    예) getName, setName, isChanged

 

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

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
  • 예컨대, 동일 코드 기반에 controller, manager, driver를 섞어 쓰면 혼란스럽다. DeviceManager와 ProtocolController는 어떻게 다른지 파악할 수 없어 혼동을 준다.

 

의미 있는 맥락을 추가하라

  • 보통 이름에 분명한 의미를 부여할 수 있지만 그럼에도 추상적일 땐 마지막 수단으로 접두어를 붙인다.
  • 예를 들어, state라는 변수가 있다고 가정하자. 이 때 state는 '상태', '주소의 주(州)' 등을 나타낼 수 있다. '주소의 주'라 가정할 때 가장 좋은것은 Address라는 클래스의 멤버 변수인 것이지만, 그렇지 않을 땐 주소를 뜻하는 "addr"를 추가해 addrState라고 작성하면 의미가 분명해진다.

 

❑ Reference

클린 코드 | 로버트 C.마틴 | 인사이트