개발자입니다
[클린코드 파이썬] 4장: 이해하기 쉬운 이름 본문
PEP 8의 명명 규약
- 모든 문자는 아스키ASCII 문자여야 한다. 즉 강세 표시 부호가 없는 영문 대소문자로 표기해야 한다.
- 모듈 이름은 짧아야 하며 모두 소문자로 표기한다.
- 클래스 이름은 파스칼 표기법으로 작성해야 한다.
- 상수 변수는 대문자 스네이크 표기법으로 적어야 한다.
- 함수, 메소드, 변수 이름은 소문자 스네이크 표기법으로 적어야 한다.
- 메소드에 대한 첫 번째 인수는 항상 소문자로 self라고 이름 붙여야 한다.
- 클래스 메소드에 대한 첫 번째 인수는 항상 소문자로 cls라고 이름 붙여야 한다.
- 클래스의 프라이빗Private 속성은 항상 밑줄(_)로 시작해야 한다.
- 클래스의 퍼블릭Public 속성은 절대로 밑줄(_)로 시작해서는 안 된다.
이름의 적정 길이
너무 짧은 이름
- 한 두 글자로 된 이름: g
- 이와 비슷한 유형: mon은 monitor, month, monster 도 될 수 있다.
- start와 같은 한 단어 이름도 모호할 수 있다. 무엇의 시작이라는 뜻일까?
예외적으로, 짧은 변수 이름이 좋은 경우도 있다. for i 를 사용하고 중첩된 루프문에서 j와 k를 사용하는 것은 일반적인 용례다.
또 다른 예외로는 데카르트 좌표에 x와 y를 사용하는 것이 있다. 이를 제외한 대부분의 경우, 단일 문자 변수 이름을 사용하지 말라고 주의를 준다. width와 height의 줄임말로 w와 h를 사용하거나, number의 줄임말로 n을 사용하고 싶은 유혹이 들지도 모르겠지만, 이 변수명들은 다른 사람들에게는 뜻이 분명하게 와닿지 않을 것이다.
소스 코드에서 문자를 삭제해 축약하지 말 것
memcpy(메모리 복사, memory copy)나 strcmp(문자열 비교, string compare)와 같은 문자 삭제 표현이 일찍이 1990년대에 C 프로그래밍 언어에서 유행했지만, 읽기 힘든 스타일의 이름이라 오늘날에는 사용해서는 안 된다. 쉽게 발음하기 어려운 이름들은 이해하기도 어렵다.
덧붙이자면, 짧은 구문을 활용해서 코드를 마치 일반 영어 문장처럼 읽을 수 있게 만들자. 예를 들어 그냐ㅡㅇ number_trials라고 쓰는 것보다는 number_of_trials가 훨씬 더 읽기 쉽다.
너무 긴 이름
일반적으로, 쓰이는 범위가 넓을수록 더 설명적인 이름이 되어야 한다. 1마 줄짜리 프로그램 안에 쓰이는 전역 변수에 payment라는 이름을 사용할 경우라면, 이런 큰 프로그램은 여러 종류의 결제 데이터를 처리할 테므로 payment라는 이름만으로는 어떤 결제 데이터를 처리하는지를 설명하기가 충분하지 않다. SalesClientMonthlyPayment나 annual_electric_bill_payment와 같이 좀 더 설명적인 이름이 적합하다.
이름에 붙는 접두사
만약 어떤 변수가 클래스의 속성인 경우 변수 이름에서는 접두사로 이를 드러낼 필요가 없을 수도 있다. 예를 들어 Cat 클래스에 weight 속성을 넣는 경우, CatWeight라고 하면 지나치게 설명적이며 쓸데없이 길어진다.
마찬가지로, 오래되어 지금은 구식이 된 관습 중 하나로는 데이터 타입의 줄임말을 이름에 넣어 사용하는 헝가리식 표기법Hungarian notation을 들 수 있다. 예를 들어 strName이라는 이름은 변수에 문자열 값이 포함되어 있음을 나타내며, iVacationDays는 변수에 정수가 포함되어 있음을 암시한다. 현대적인 프로그래밍 언어와 IDE에서는 이러한 접두사 없이도 데이터 타입 정보들을 프로그래머에게 전달할 수 있기 때문에 오늘날 헝가리식 표기는 별로 쓸모가 없다.
반면, 부울 값 포함 변수, 부울 값 반환 함수 및 메소드에 is, has 접두사를 붙이면 이름을 읽기 쉬워진다. 아래와 같이 사용하자.
if item_under_repair.has_key('tires'):
is_vehicle = True
이름의 순차적 숫자 접미사
순차적 숫자 접미사가 이름에 붙어 있다면 변수의 데이터 타입 변경 또는 이름에 다른 세부 정보 추가한다.
payment1, payment2, payment3 → payments 라는 리스트 또는 튜플로 만든다.
makePayment1(amount), makePayment2(amount) 같은 이름의 함수는 makePayment(1, amount), makePayment(2, amount)처럼 리팩토링해서 정수 인수를 받는 단일 함수로 만드는 편이 좋다. 이 함수들이 분리되어야 마땅할 만큼 행동이 다르다면, 그 의미는 함수 이름 뒤 숫자 대신 들어가야 한다. makeLowPriorityPayment(amount)와 makeHighPriorityPayment(amount) 같은 방식을 말한다.
검색 가능한 이름 짓기
num 대신 number 로 한다.
email이라는 이름은 모호하므로 emailAddress나 downloadEmailAttachment, emailMessage 또는 replyToAddress 같은 좀 더 상세한 이름을 고려하자.
농담, 말장난, 문화적 참조는 피하자
예전에 내가 참여했던 한 소프트웨어 프로젝트에서 gooseDownload()라는 함수는 뭘 뜻하는지 전혀 알 수 없었다. goose the engine에서 따와 엔진 속력을 높이기 위해 가속 페달을 밟는goose 것을 뜻하는 자동차 용어였다. 이 동료가 그만둔 뒤, gooseDopwnload() 함수 이름을 increaseDownloadSpeed()라고 바꿨다.
내장 이름 덮어쓰기 금지
변수 이름을 list나 set으로 지정하면 파이썬의 list()와 set() 함수를 덮어쓰게 되므로 나중에 코드에서 버그가 발생할 가능성이 높아진다.
다른 이름을 덮어 쓸 가능성이 높은 파이썬 이름으로는 all, any, date, email, file, format, hash, id, input, list, min, max, object, open, random, set, str, sum, test, type 등이 있다.
역대 최악의 변수명
date: 모든 변수는 데이터를 갖고 있기 때문에 date라는 변수명은 끔찍하게 범용적인 이름이다.
var: 자신의 애완견 이름을 '개'라고 짓는 것과 비슷하다.
temp: 데이터를 '임시'로 저장하는 변수 이름으로 흔히 쓰이지만 좋지 않은 선택이다. '파이썬의 선Zen' 관점에서도 결국 모든 변수는 임시 변수이기 때문이다.
온도temperature 데이터의 통계적 분산을 유지할 변수가 필요한 경우라면 temperatureVariance같은 이름을 사용하라.
'Python > 클린 코드, 이제는 파이썬이다' 카테고리의 다른 글
[클린코드 파이썬] 6장: 파이썬다운 코드를 작성하는 법 (5) | 2024.09.01 |
---|---|
[클린코드 파이썬] 5장: 코드 악취 감지와 대응 (4) | 2024.09.01 |
[클린코드 파이썬] 3장: 코딩 스타일 정립과 코드 포매팅 자동화 (0) | 2024.08.27 |
[클린코드 파이썬] 1장: 에러 메시지 파악과 고수의 도움을 받기 위한 질문 에티켓 (0) | 2024.08.27 |
[클린코드 파이썬] 0장: 추천 학습 도서 (0) | 2024.08.21 |