[클린 코드] TIL(Today I Learned) DAY 3

soleil_lucy·2024년 1월 28일
0

TIL (2024.01.28)

DAY 3

  • 오늘 읽은 범위: 2장 의미 있는 이름

책에서 기억하고 싶은 내용

2장 의미 있는 이름

이름을 잘 짓는 간단한 규칙

1. 의도를 분명히 밝혀라

  • 변수나 함수 그리고 클래스 이름이 답해야 할 질문?
    • 변수(혹은 함수나 클래스)의 존재 이유는?
    • 수행 기능은?
    • 사용 방법은?
  • 이름에 따로 주석이 필요하다면?
    • 의도를 분명히 드러내지 못했다는 말
  • 의도를 드러나는 이름을 사용했을 경우의 이점?
    • 코드 이해와 변경이 쉬워짐
    • 절약하는 시간이 많아짐

2. 그릇된 정보를 피하라

  • 그릇된 정보?
    • 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하는 경우
    • 여러 계정을 그룹으로 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않음!
    • 서로 흡사한 이름을 사용하지 않도록 주의함
    • 일관성이 떨어지는 표기법
      • 유사한 개념은 유사한 표기법을 사용함

3. 의미 있게 구분하라

  • 아무런 정보를 제공하지 못하는 이름을 사용하지 마라
  • 불용어를 추가한 이름 역시 아무런 정보를 제공하지 못한다
    • 불용어?
      • 인터넷 검색 시 검색 용어로 사용하지 않는 단어. 관사, 전치사, 조사, 접속사 등 검색 색인 단어로 의미가 없는 단어를 의미함 [출처]
    • 불용어 예시
      • Info, Data 등

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

  • 말을 처리하려고 발달한 두뇌를 활용하기 위해 발음하기 쉬운 이름을 선택하라

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

  • 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않고 검색하기도 어렵다
  • 검색하기 어려운 문자 예시
    • 숫자 7
    • 문자 e
  • 검색하기 쉬운 이름을 사용하라
    • 검색하기 쉽다는 관점에서는? 긴 이름 >>>>> 짧은 이름

6. 인코딩을 피하라

  • 인코딩 예시?
    • 헝가리안 표기법
    • 멤버 변수 접두어
      function Part (name) {
      			    this.m_dsc = name; // 멤버 변수에 m_이라는 접두어 붙인 경우
      }
    • 인터페이스 클래스와 구현 클래스
      저자는 인터페이스 이름은 접두어를 붙이지 않는 편이 좋다고 생각(Ex. IShapeFactory)
      저자는 내가 다루는 클래스가 인터페이스라는 사실을 남에게 알리고 싶지 않다. 인터페이스 클래스 이름과 구현 클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 선택하겠다고 한다.(Ex. ShapeFactoryImp)

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

  • 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다
  • 전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다

8. 클래스 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합하다
    • Ex. Customer, WikiPage, Account, AddressParser 등
  • 클래스 이름으로 지양해야 하는 것?
    • Ex. Manager, Processor, Data, Info 등

9. 메서드 이름

  • 메서드 이름은 동사나 동사구가 적합하다
    • Ex. postPayment, deletePage, save 등
  • 접근자, 변경자, 조건자는 javabean 표준에 따라 get, set, is를 붙임
    const name = employee.getName();
    customer.setName('Kim');
    if(paycheck.isPosted()) { ... }

10. 기발한 이름은 피하라

  • 재미난 이름보다 명료한 이름을 선택하라
  • 특정 문화에서만 사용하는 농담은 피하는 편이 좋다
  • 의도를 분명하고 솔직하게 표현하라

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

  • 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다
  • 메서드 이름은 독자적이고 일관적이어야 한다

12. 말장난을 하지 마라

  • 한 단어를 두 가지 목적으로 사용하지 마라
  • 한 단어를 두 가지 목적으로 사용하지 말아야 하는 이유?
    • 대충 훑어봐도 이해할 코드를 작성하기 위함

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

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

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

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

15. 의미 있는 맥락을 추가하라

  • 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다
  • 함수 이름은 맥락 일부만 제공하며, 알고리즘이 나머지 맥락을 제공한다

16. 불필요한 맥락을 없애라

  • 일반적으로는 짧은 이름이 긴 이름보다 좋다
    • 단, 의미가 분명한 경우에 한해서!
  • 이름에 불필요한 맥락을 추가하지 않도록 주의한다

마치면서

  • 좋은 이름을 선택하려면?
    • 설명 능력이 뛰어나야 한다
    • 문화적인 배경이 같아야 한다

오늘 읽은 소감

변수나 함수 이름을 지을 때는 많이 고민했던 거 같은데 그걸 제외하면 위에서 말한 규칙들은 거의 지키고 있지 않았던 것 같다. 특히, 한 개념에 한 단어를 써라라는 규칙에서 add 같은 단어를 쓸 경우 뭔가 추가하는 개념이 있으면 다 갖다 붙였던 것 같다. 위의 규칙들이 익숙해질 때까지 리팩토링할 때, 위의 규칙들을 훑어보면서 적용하는 연습을 해야겠다.

책을 읽으려는 이유?!

profile
여행과 책을 좋아하는 개발자입니다.

0개의 댓글

관련 채용 정보