2장. 의미있는 이름

공부하는 감자·2024년 2월 5일
0

클린코드

목록 보기
2/18

의미 있는 이름

소프트웨어에서 이름은 어디에나 쓰이므로, 이름을 잘 지으면 여러모로 편하다.

ex) 변수, 함수, 클래스, 패키지, 소스 파일, 디렉터리, jar파일, war 파일

의도를 밝혀야 한다.

변수, 함수, 클래스 이름은 다음 질문에 모두 답해야 한다.

  • 존재 이유는?
  • 수행 기능은?
  • 사용 방법은?

적합한 이름

클래스 이름

  • 명사나 명사구
  • 좋은 예) Customer, WikiPage, Account, AddressParser
  • 나쁜 예) Manager, Processor, Data, Info

메서드 이름

  • 동사나 동사구
  • 접근자, 변경자, 조건자는 javabean 표준에 따라 앞에 get, set, is를 붙인다.
  • 생성자를 중복 정의할 때는 정적 팩토리 메서드를 사용한다.
    • 메서드는 인수를 설명하는 이름을 사용한다.
    • ex) new Complex(23.0) → Complex.FromRealNumber(23.0)

그릇된 정보를 전달하면 안 된다.

그릇된 단서를 남기면 안 된다.

  • 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용할 경우
    • 직각삼각형의 빗변(hypotenuse)의 이름을 hp로 사용하면 유닉스 플랫폼이나 유닉스 변종을 가리키는 이름과 겹친다.
  • 여러 계정을 그룹으로 묶을 때, 실제 List가 아님에도 accountList라 명명하는 경우
  • 일관성이 떨어지는 표기법을 사용한 경우
    • 유사한 개념은 유사한 표기법을 사용한다.
  • 구분하기 힘든 소문자 L과 대문자 O를 사용할 경우
    • 숫자 1, 0과 구분하기 힘들다.

의미 있게 구분하는 법

  • 연속된 숫자를 덧붙이면 안 된다.
    • ex) a1, a2, a3 등
  • 불용어(noise word)를 추가하면 안 된다.
    • ProductInfo와 ProductData처럼 개념을 구분하지 않은 채 이름만 달리할 경우 (의미가 불분명한 불용어 사용)
    • variable, table 등의 중복된 단어를 사용할 경우
    • NameString 처럼 당연한 표현을 할 경우 (이 경우, Name이 String이 아니면 그릇된 정보를 제공하게 된다.)

쉬운 이름을 사용하라

  • 발음하기 쉬운 이름을 사용하라
    • 과도한 약어 사용 등은 금지
  • 검색하기 쉬운 이름을 사용하라
    • 이름 길이는 범위 크기에 비례해야 한다.

인코딩을 피하라

  • 헝가리식 표기법은 사용하지 말자.
    • phoneString처럼 타입을 이름에 명시하는 행위
  • 멤버 변수에 접두어를 붙이지 말자.
    • 멤버 변수에 m_ 를 붙이는 등의 행위
  • 인터페이스는 클래스 명처럼 사용하고, 구현 클래스는 인코딩하여 표기한다.
    • 내가 다루는 클래스가 인터페이스라는 사실을 남에게 알리지 않는다.
    • 구현 클래스 좋은 예) ShapeFactoryImp, CShapeFactory

명료한 이름을 사용하자

  • 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면, 바람직하지 못한 이름이다.
    • 문제 영역이나 해법 영역에서 사용하지 않는 이름을 선택했기 때문에 생기는 문제
  • 문자 하나만 사용하는 변수 이름은 적절하지 못하다.
    • 루프에서 반복 횟수를 사용하는 경우를 제외한 나머지 경우
  • 기발한 이름은 피하라.
    • 좋아하는 책에서 따오는 것처럼, 누구나 알 수 없는 이름
    • 구어체나 속어를 이름으로 사용하는 경우: kill() → whack()

단어와 이름

  • 한 개념에 한 단어를 사용하라
    • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수해야 한다.
    • 똑같은 메서드를 클래스마다 fetch, retrieve, get 등으로 부른다.
  • 한 단어를 두 가지 목적으로 사용하지 마라.
    • 다른 개념에 같은 단어를 사용하는 경우
    • add 메서드가 기존 값 두 개를 더하거나 이어서 새로운 값을 만드는 경우, 집합에 값 하나를 추가하는 메서드를 새로 구현할 경우 이 메서드의 이름은 add가 아닌 insert나 append가 되어야 한다.

영역과 이름

  • 해법 영역에서 가져온 이름을 사용하라
    • 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등
  • 적절한 ‘프로그래밍 용어’가 없다면 문제 영역에서 가져온 이름을 사용한다.
    • 코드를 보수하는 프로그래머는 전문가에게 의미를 물어 파악할 수 있다.
    • 단, 모든 이름을 문제 영역에서 가져오면 매번 고객에게 의미를 물어야 한다.

맥락과 이름

  • 의미 있는 맥락을 추가하라
    • 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.
    • 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.
  • 불필요한 맥락은 없애라
    • 고급 휘발유 충전소(Gas Station Deluxe)라는 애플리케이션을 짠다고 가정할 때, 모든 클래스 이름을 GSD로 시작하는 경우
  • 의미가 분명한 경우에 한해 짧은 이름이 긴 이름보다 좋다.

Reference

참고 서적

📔 Clean Code

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글