[Clean Code] 2. 의미 있는 이름

김낭만·2024년 11월 3일

클린코드

목록 보기
1/1

이 시리즈에서는 클린 코드(Clean Code)를 읽고,
매 챕터를 나름대로 요약 및 첨언한다.

요약정리

  • 당연히, 무의미한 이름을 짓지 말자.
    • e.g. d -> elapsedTimeInDays
  • 그릇된 정보를 주는 이름도 짓지 말자.
    • 널리 쓰이는 의미가 있는 단어를 다른 의미로 쓰지 말자.
  • 아무 의미 없이 비슷한 이름을 쓰지 말자.
    • 하지만 비슷한 개념이면 비슷한 이름을 쓰는 게 좋다.
  • 무의미한 불용어(variable, the, a, info, data 등)를 넣지 말자.
    • e.g. theAccountInfoData -> account
  • 발음하기 쉬운 이름을 쓰자.
    • e.g. genymdhms -> generationTimestamp
  • 이름 길이는 범위 크기에 비례해야 한다.
    • 간단한 반복문에 i 쓰는 게 문제가 안 되는 이유다.
  • 이름에 인코딩 넣지 마라.
    • 여기서 인코딩을 넣지 말라는 건, 타입이나 범위같은 변수에 대한 추가적인 정보를 이름에 넣지 말라는 거다.
    • e.g. phoneString은 나중에 새로운 클래스로 대체되어도 변수명이 그대로 phoneString이다.
    • 하지만 인코딩이 필요한 경우도 있다.
      • e.g. 인터페이스와 구현 클래스를 만들 때.
  • 클래스나 객체 이름은 명사형이어야 한다.
  • 메서드(및 함수) 이름은 동사형이어야 한다.
    • 그리고 생성자 오버로딩 시에는 정적 팩토리 메서드를 써라.
      • e.g. Complex(23.0)보다 Complex.FromRealNumber(23.0)이 명확하다.
  • 기발한 이름 쓰지 마라. 이름에다 농담으로 장난질하지 말라는 뜻이다.
    • e.g. HolyHandGrenade -> DeleteItems
  • 개념과 단어를 일대일로 매핑시켜라.
    • 같은 개념에는 같은 단어를 사용해라.
      • e.g. 같은 메서드를 클래스마다 fetch, retrive, get으로 다르게 작성하지 않기.
    • 다른 개념에는 다른 단어를 사용해라.
      • e.g. add가 어떤 클래스에서는 덧셈을 수행하고, 어떤 클래스에서는 집합에 값을 넣게 하지 않기.
  • 용어를 사용할 때는,
    • 우선 프로그래머들이 이해하는 용어를 사용해라.
      • e.g. JobQueue, Visitor, StackTrace, ...
    • 적절한 용어가 없으면 도메인에서 사용하는 용어를 사용해라.
      • e.g. 차대변을 debitcredit으로 작성.
  • 맥락을 추가할 때는,
    • 클래스나 함수 속에 넣어 맥락을 추가하는 게 제일 좋고,
    • 불가피한 경우 변수명에 접두어라도 넣어야 하며,
    • 맥락이 불분명한 변수만 달랑 놓는 건 피해야 한다.
    • e.g. state > addrState > Address.state
  • 그렇다고 불필요한 맥락을 넣지는 마라.
    • 일괄적으로 접두어 넣지 마라.
    • 이름은 의미가 분명한 경우에 한해서, 짧을수록 좋다.

연습문제

위 노트를 기반으로 ChatGPT에게 연습문제를 몇 개 만들어달라고 하고,
내 나름대로 바꾸어 보았다.

  • d: 데이터 처리 시간(일 기준)을 저장하는 변수.
    • processDurationInDays
  • theDataContainer: 사용자가 업로드한 파일을 담는 리스트.
    • User.uploadedFiles
  • timeZoneCodeNum: 사용자의 국가 코드를 저장하는 변수.
    • User.nationalCode
  • user_obj_holder: 사용자의 프로필 정보를 저장하는 객체.
    • UserProfile 또는 User
  • generateFunction: 영수증을 생성하는 메서드.
    • generaterReCeipt
  • HolyGraill: 임시로 모든 설정 값을 초기화하는 메서드.
    • initializeSettingsTemporarily
  • SomeProcessor: 파일 업로드를 처리하는 클래스.
    • FileUploader
  • accountDateStr: 계정 생성 날짜를 저장하는 변수.
    • Account.createdDate
  • infoStorage: 사용자 설정 값을 저장하는 딕셔너리.
    • settings
  • valueHelper: 특정 할인율을 계산하는 함수.
    • calculateDiscountRate
  • getNum: 총 주문 수를 반환하는 메서드.
    • AccountBook.getTotalOrderCount
  • list2: 사용자의 배송지 목록을 담고 있는 변수.
    • User.deliveryAddresses
  • theKeyValueStorage: 쿠키 데이터를 저장하는 해시맵.
    • cookies
  • myProcessor: 메시지 발송을 관리하는 객체.
    • messageSender
  • valX: 사용자가 입력한 결제 금액을 담는 변수.
    • inputPrice
  • doProcess: 사용자의 이메일 주소를 검증하는 함수.
    • validateEmailAddress
  • calcStuff: 사용자의 총 구매액을 계산하는 메서드.
    • User.getTotalPrice
  • fetchCustomerInfo: 고객의 거래 내역을 불러오는 메서드. (다른 클래스에서는 get 사용)
    • Customer.getTrasactionHistory
  • pString: 사용자의 전화번호를 저장하는 변수.
    • User.phoneNumber
  • itemManagerObject: 제품 리스트를 관리하는 객체.
    • productManager
profile
재밌거나 필요하다고 생각하는 것을 만듭니다.

0개의 댓글