클린코드

[DAY 4] 클린 코드 TIL - 2장. 의미 있는 이름

lado 2022. 1. 25. 23:38

🔖 오늘 읽은 범위 : 2장, 의미 있는 이름 (p.32 ~ p.38)


😀 책에서 기억하고 싶은 내용

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

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

    • 접근자: get (ex) getName()

    • 변경자: set (ex) setName()

    • 조건자: is (ex) isPosted()

  • 한 개념에 한 단어를 사용해라. 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다. 이름이 다르면 독자는 당연히 클래스도 다르고 타입도 다르리라 생각한다.

  • 한 단어를 두 가지 목적으로 사용하지 마라. 매개변수와 반환 값이 의미적으로 똑같다면 문제가 없지만, 같은 맥락이 아닌데도 ‘일관성’을 고려한다고 하나의 단어로 퉁치면 안된다.

  • 프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다.

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

  • 적절한 프로그래머 용어가 없다면 문제 영역, 도메인에서 이름을 가져온다. 그러면 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있다.

  • 변수의 의미를 분명하게 만들기 위해 클래스, 함수, 네임 스페이스 안에 변수를 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.

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

  • 좋은 이름을 선택하려면 설명 능력이 뛰어나야 하고 문화적인 배경이 같아야 한다. 좋은 이름을 선택하는 능력은 기술, 비즈니스, 관리 문제가 아니라 교육 문제다.


🤔 오늘 읽은 소감은?

  • 한 개념에 한 단어를 사용하라는 원칙과 한 단어를 두 가지 목적으로 사용하지 말라는 원칙을 많이 어겼던 것 같다. 같은 개념인데도 다른 단어로 표기하거나 다른 동작을 하는데 같은 이름으로 퉁친 것들이 좀 있는데 그런 것들을 정리해야겠다.
  • 클래스, 함수, 네임 스페이스 안에 변수를 넣으니 의미가 되게 명확해지는 느낌이다. 애용해야겠다.

🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용

  • VISITOR 패턴

    • 실제 로직을 가지고 있는 객체(Visitor)가 로직을 적용할 객체(Element)를 방문하면서 실행하는 패턴. 즉, 로직과 구조를 분리하는 패턴

  • JobQueue

    • 작업 대기열에는 하위 시스템에서 처리되기를 기다리는 작업의 순서가 지정된 목록이 담겨 있다.

📌 소감 3줄 요약

  • 매개변수와 반환 값이 의미적으로 똑같지 않다면 다른 이름을 써라.
  • 접두어를 붙이기 전에 클래스, 함수, 네임 스페이스 안에 변수를 넣는 것이 더 적절하다.
  • 문장이나 문단처럼 읽히는 코드 아니면 적어도 표나 자료 구조처럼 읽히는 코드를 짜는 데만 집중해라.