본문 바로가기
Book & Lesson

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

by 카프리썬 2022. 3. 2.
728x90

 

노마드코더 '클린코드' 북클럽 (노개북)

앞으로 3주간 완독하는게 목표! 과연..! 이 책을 읽고 코드 리팩토링하는 스킬을 UP하면서 나만의 코드 스타일이 생겼으면 좋겠다. 

 

반응형

2장에서는 이름을 잘 짓는 간단한 규칙을 소개한다. 개인적으로 네이밍에도 골치아파하는 나에게 큰 도움이 될것 같은 부분이다. 


책에서 기억하고 싶은 내용을 써보세요.

의도를 분명하게 밝혀라 

의도가 분명한 이름이 정말 중요하다! 주석이 필요하다면 의도를 분명히 드러내지 못했다는 것이다. 

변수 혹은 함수나 클래스의 존재이유는? 수행기능은? 사용방법은? 이에 대한 답을 모두 할 수 있는게 이름!

 

그릇된 정보를 피하라

나름대로 널리 쓰이는 의미가 있는 단어를 함부로 축약하거나 다른의미로 사용해선 안된다.

유사한 개념은 유사한표기법을 사용한다. 일관성이 떨어지는 표기법이 그릇된 정보이다. 

ex : AccountList 라고 명명하면 데이터타입을 list로 이해할수도 있다. -> accountGroup, accounts 대체 

 

의미있게 구분해라

이름에 연속된 숫자를 추가하거나 불용어(noise word)를 사용하지 않는다. 

- 변수에 a1, a2와 같이 이름에 숫자를 붙이기 보다는 명확한 이름을 사용한다.

- Info, Data는 의미가 불분명한 불용어이다 

  ex : ProductInfo, ProductData -> 의미상 구분x Product대체 , CustomerObject -> Customer대체

 

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

프로그래밍은 사회활동이기 때문에 소리나는대로 읽는 변수명이 아니라 발음하기 쉬운 명을 사용해야한다. 

 

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

전체검색으로 이름을 쉽게 찾을 수 있다. 이 관점에선 긴이름이 짧은 이름보다 좋다. 하지만 의미가 분명하면 짧은게 더 좋다. 

 

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

문자 하나만 사용하는 변수를 사용하지 않는다. 나중에 어떤 의미인지 실제개념으로 변환해야한다. 

 

클래스(객체) 이름 : 명사나 명사구가 적합하다. Data, Info, Processor, Manager 같은 단어는 피해라.

메서드 이름 :  동사나 동사구가 적합하다. postPayment, deletePage, save 같은 동사

 

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 일관성 있는 어휘를 사용해라.

예를 들어, 똑같은 메소드를 클래스마다 fetch, get,retreive로 부르면 혼란스럽다. 

동일 코드기반에  Controller, Manager, Driver 섞어 쓰면 혼란스럽다.

 

의미있는 맥락을 추가해라.

클래스,함수,이름 공간에 넣어 맥락을 부여한다. 

예를 들어 firstName,lastName, street, city,state 라는 변수가 있는데 이들을 훑어보면 주소(addreess)라는 사실을 알게 된다.

하지만 state라는 변수만 사용한다면 이게 주소(address) 도메인을 뜻하는 의미를 알 수 있는가? no.

그래서 접두어(addr)를 추가해서 addrFirstName,addrLastName, addrStreet, addrCity,addrState 라고 쓴다면 

변수가 좀더 큰 구조에 속한다는 사실을 알수 있다. (address 클래스를 생성하면 더 좋다.)

 

불필요한 맥락을 없애라. 

예를 들어 고급휘발유 충전소 (gas station deluxe)라는 애플리케이션을 짠다고 할때

클래스이름을 GSD라고 짜는것은 불필요한 맥락이다. 일반적으로 긴 이름보다 짧은 이름이 더 좋지만, 의미가 분명한 경우에 한해서다

 

 

728x90

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

 

사실 솔직히 처음에 내가 짠 변수명을 누군가 임의로 바꿀때 '이렇게 까지 해야하나?' 라는 생각이 있었다.

물론 이제는 좋은 이름으로 바꿔주면 반갑고 뭔가 고마운 기분이 든다.

그런데 이렇게 이번 장을 보면서 다시한번더 감사해야겠다고 느꼈다.

변수명이 네이밍이 사소한것 같지만 생각보다 가독성을 높여주는 부분 중에 하나라고 느껴졌기 때문이다.

단순히 몇가지 규칙만을 지키면서 남들에게도 쉽게 읽힐수 있는 코드가 되니까 조금더 규칙을 학습하고 익혀봐야겟다. 

 

 

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

추가로, 사내에서 가이드라인으로 지정한 몇가지 코드 룰을 비롯한 파이썬 코딩 컨벤션(네이밍규칙) 정리해보려고 한다. 

 

공통룰

  • 약어 사용금지 : 범용적인 약어(HTML,URL,ID)를 사용할 경우 대문자
  • 한글발음 사용금지
  • 특수문자 사용금지
    • 내부에서 사용하는 함수명일 경우 언더스코어(_) 접두어 사용 
    • 변수명 또는 함수명 생성시 언더스코어(_)로 키워드 구분
    • 클래스 속성으로 사용될 경우 더블언더스코어(__) 접두어 사용
  • 2글자 이상의 대문자 연속 사용 금지
  • 한글자 이름 사용금지 : 반복문 카운터 변수명 제외 
  • 대시(-) 사용금지 

 

PEP8 네이밍 규칙

파이썬은 언어의 컨벤션을 이러한 제안서(Process)로 나타내고 있는데 이것이 바로 PEP8!

  • 소문자 L, 대문자 O, 대문자 I는 변수명으로 사용하지 마세요. 어떤 폰트에서는 가독성이 굉장히 안 좋습니다.
  • 모듈(Module) 명은 짧은 소문자로 구성되며 필요하다면 밑줄로 나눕니다.
    • 모듈은 파이썬 파일(.py)에 대응하기 때문에 파일 시스템의 영향을 받으니 주의하세요.
    • C/C++ 확장 모듈은 밑줄로 시작합니다.
  • 클래스 명은 카멜케이스(CamelCase)로 작성합니다.
    • 내부적으로 쓰이면 밑줄을 앞에 붙입니다.
    • 예외(Exception)는 실제로 에러인 경우엔 “Error”를 뒤에 붙입니다.
  • 함수명은 소문자로 구성하되 필요하면 밑줄로 나눕니다.
    • 대소문자 혼용은 이미 흔하게 사용되는 부분에 대해서만 하위호환을 위해 허용합니다.
  • 인스턴스 메소드의 첫 번째 인자는 언제나 self입니다.
  • 클래스 메소드의 첫 번째 인자는 언제나 cls입니다.
  • 메소드명은 함수명과 같으나 비공개(non-public) 메소드, 혹은 변수면 밑줄을 앞에 붙입니다.
  • 서브 클래스(sub-class)의 이름충돌을 막기 위해서는 밑줄 2개를 앞에 붙입니다.
  • 상수(Constant)는 모듈 단위에서만 정의하며 모두 대문자에 필요하다면 밑줄로 나눕니다.

 

  •  
반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });