[클린코드] 2장. 의미 있는 이름

JUN·2024년 7월 7일
1

클린코드

목록 보기
2/14

이름을 잘 짓는 간단한 규칙 몇가지

의도를 분명히 밝혀라

코드가 단순하다고 해도 함축성을 가지고 있으면 잘 쓴 변수라고 할 수 없다.

함축성이 있는지 체크하는 방법.

  • 자신이 쓴 코드를 읽고 독자가 어떤 정보를 안다고 가정했는지 고민할것. (만약 코딩 테스트를 치루는데 배열의 이름을 dp라고 한다면 독자가 해당 배열이 동적 계획을 담은 Memoization 배열이라는 정보를 안다고 가정하는 것이다.)

그릇된 정보를 피해라.

  1. 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 말것.
  2. 자료구조를 변수명에 붙일때는 주의할 것.
  3. 한 프로젝트 내에 유사한 이름은 사용하지 말것.
  4. 변수 이름에서 소문자 "l"과 대문자 "O"를 함께 사용하는 것은 피할 것.

의미있게 구분하라

  • 연속적인 숫자를 붙이는 것(a1. a2, a3, …) 은 피할 것.
  • Info, Data 와 정보없는 단어도 사용하지 말 것.

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

  • gendymhms (generate date, year, month, day, hour, min, sec)와 같은 발음하기 힘든 이름은 사용하지 말것. → generationTimeStamp 로 변경 가능

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

  • 상수를 변수화할 것. ← 매직 넘버 제거
    • 5WORK_DAYS_PER_WEEK : 5를 사용하는 것보다 해당 이름으로 변수화하는 것 이 좋다.
  • 이름 길이는 범위의 크기에 비례해야 한다.
    • 간단한 메서드의 로컬 변수만 한 문자로 사용하고 변수나 상수를 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직함.

인코딩을 피하라

💡 `인코딩` : [코드](https://namu.wiki/w/%EC%BD%94%EB%93%9C)화, [암호화](https://namu.wiki/w/%EC%95%94%ED%98%B8%ED%99%94)를 의미한다. 해당 문장에서 인코딩은 헝가리안 표기법과 같이 내부적 언어에 따라 정보를 변수에 암호화하는 걸 의미한다.
  • 접두어를 사용하지 마라. → 접두어가 필요 없을 정도로 작거나 ide 색상 변경을 활용할 것.
    • m_dsc , m_rsv 와 같은 접두어는 사용하면 안됨.
  • 인터페이스 클래스와 구현 클래스의 변수명 설정 시
    • 인터페이스 클래스라고 접두어 I 를 붙이지 말자
    • 굳이 붙이겠다면 구현 클래스에 접미사를 붙여라. ShapeFactoryImp 처럼.

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

  • 한개짜리 문자 변수 이름은 안된다.
    • index 변수 i, j, k 는 괜찮다, l 은 안된다!

클래스 이름

  • 명사명사구 로 설정하라!

메서드 이름

  • 동사동사구로 설정하라!

기발한 이름은 피하라

  • 재미난 이름보다는 명료하고 간단한 이름을 선택할 것.

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

  • 객체를 추상화 할 때 각 추상화 개념의 단어 하나를 선택하여 이를 고수한다.

해법영역, 문제영역을 구별하고 해당 영역에서 이름을 가져와라.

해법 영역 : 코드나 시스템을 설계하고 구현하는데 사용되는 프로그래밍 개념이나 기술을 의미한다.
ex ) 디자인 패턴, 알고리즘, 데이터 구조 등
문제 영역 : 개발하려는 시스템이 해결하려는 실제 세계의 문제나 업무를 의미한다.
ex ) 사용자 관리, 상품 관리 등의 업무 개념

  • 해법 영역에서 가져온 이름을 우선적으로 사용하라.
    • 프로그래머에게 익숙한 기술 개념에는 기술 이름이 가장 적합한 선택이다.
    → Visitor 패턴을 했을 때 `AccountVisitor` 라는 변수
    
  • 문제 영역에서 가져온 이름을 사용하라.
    • 적절한 프로그래머 용어 가 없다면 문제 영역에서 이름을 가져온다.

의미 있는 맥락을 추가하되, 불필요한 맥락을 없애라.

  • 클래스 함수, 이름 공간에 넣어 맥락을 부여하고 마지막 수단으로 접두어를 붙인다.
  • 짧은 이름이 긴 이름보다 좋지만 이름에 불필요한 맥락을 추가하지 않도록 주의하자.

스터디 질문.

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

2장의 첫문단과 마지막 문단에 해당 문장이 또 한번 등장하더라구요.

저는 프로젝트 경험이 많지 않아 이러한 프로그래밍적 문화 를 조금 더 많이 알고싶은 마음이 들었습니다.

예를 들어, isDigit와 같이 접두사에 'is'가 붙은 메서드는 boolean을 반환하는 것이 일반적인 관례입니다. 이는 개발자들 사이의 일종의 문화로도 볼 수 있을 것 같아요.

혹시 이러한 경우 말고도 다른 이름짓기 불문율이 있을까요?

하나씩 공유해주시면 좋은 이름을 선택하는데 다들 도움이 될 것 같습니다!

답변.

  1. 옳은 입력값인지 혹은 비슷한 내용의 메서드는 validate을 붙이는 것도 관습인 것 같습니다. 확인하는데는 check, verify 등의 단어도 있지만 사용하는 사례는 잘 못 본 것 같습니다.
  2. Spring 프레임워크에서는 클래스 이름 뒤에 'Controller', 'Service', 'Repository',"Dto" 등의 접미사를 사용하여 클래스 역할을 구분하는 것도 문화로 볼 수 있을 거 같습니다 !
  3. is의 경우는 상태 관련 메소드라고 할 수 있겠네요!
    list나 배열의 경우 s를 붙이는 관습
    이벤트 처리 패턴으로 on을 앞에 붙이는 방법
    equals를 eq, 반대대는 말로 ne 와 같은 줄임말
profile
순간은 기록하고 반복은 단순화하자 🚀

0개의 댓글