파이썬에서 사용하는 PEP(Program Enhance Proposal) 에서 Name Convention에 대해 알아보려고 한다. PE
P는 파이썬 개발자들 간의 관습을 적어놓은 것이라고 생깍하면 된다. 파이썬 유저라면 파이썬 코드를 작성할 때 PEP-8을 이용해서 쓰는 것을 추천한다.
목차
- 피해야 할 이름
- Package and Module Names (패키지 모듈 이름)
- Class Name (클래스 이름)
- Type Variable Names (타입 변수 이름)
- Exception Names (예외 이름)
- Global Variable Names (전역 변수 이름)
- Function and Variable Names (함수, 변수 이름)
- Method Names and Instance Variables (메소드와 인스턴스 변수 이름)
- Constants (상수)
피해야 할 이름
‘l’ (소문자 엘), ‘O’ (대문자 오), 또는 ‘I’ (대문자 아이)와 같은 문자를 단일 문자 변수 이름으로 사용하지 말아햐 한다. 그 이유는 특정 글꼴에서는 숫자 일(1)과 숫자 영(0)이 알파벳과 구분이 가지 않기 때문이다. 대문자 아이 ('I') 대신에 대문자 엘 ('L')을 사용 할 것을 권장한다.
# Wrong
I = 3
O = 'a'
# Correct
L = 5
패키지, 모듈 이름
모듈은 짧고 모두 소문자로 된 이름을 가져야 한다. 가독성을 향상시키면 모듈 이름에 밑줄을 사용할 수 있다. 파이썬 패키지도 짧고 모두 소문자로 된 이름을 가져야 하며, 밑줄 사용은 권장되지 않는다.
- 모듈 이름이 짧고 소문자로 구성된 예시: numpy, requests, flask
- 가독성을 위해 밑줄이 포함된 모듈 이름 예시: date_utils, file_parser
클래스 이름
클래스 이름은 일반적으로 Pascal Case 규칙을 사용한다.
- Pascal Case를 사용한 클래스 이름 예시 : DataLoader, GameCharacter
타입 변수 이름
PEP 484에서 일반적으로 Pascal Case를 사용하며 짧은 이름을 사용하도록 권장한다.
짧은 이름 + Pascal Case를 사용한 예시
T = TypeVar('T')
AnyStr = TypeVar('AnyStr')
Num = TypeVar('Num')
예외 이름
예외 클래스 이름은 클래스 + "Error"의 접미사를 붙여서 작성한다.
예시
- ConnectionError
- validationError
- TimeoutError
전역 변수 이름
모든 문자를 대문자로 사용하며, 단어간의 구분은 하이픈( '-' )을 이용하여 작성합니다.
예시
- MAX_SIZE
- DEFAULT_TIMEOUT
함수, 변수 이름
함수 이름은 소문자로 해야하며, 필요에 따라 단어 사이의 밑줄을 사용한다. 이것은 Snake Case라고 생각하면 된다.
예시
- 함수 이름 예시 : calculate_tax., send_message
- 변수 이름 예시 : item_count, database_connection
메소드 이름 및 인스턴스 변수
필요에 따라 단어를 구분하기 위해 밑줄을 사용하여 소문자로 작성해야 한다. 비공개 메소드와 인스턴스 변수에는 하이픈을 하나만 사용한다. 그리고 외부에서 접근을 못하게 하기 위해서는 언더바 2개를 사용한다. 두개 모두 Snake Case를 사용한다.
예시
- 메소드 : calculate_total
- 인스턴스 변수
- user_id: 사용자의 ID를 저장하는 변수
- _password: 비밀번호를 비공개로 저장하는 변수
- __internal_cache: 클래스 내부에서만 사용되고 하위 클래스에서 이름 충돌을 방지하기 위한 비공개 변수
언더바 하나의 예시
class Account:
def __init__(self, owner):
self._balance = 0 # 내부 사용을 위한 변수로, 외부에서 직접 접근을 권장하지 않음
self.owner = owner
def deposit(self, amount):
if amount > 0:
self._balance += amount
self._update_ledger(amount) # 내부 메소드 호출
def _update_ledger(self, amount):
print(f"{amount}가 입금됐습니다.")
언더바 두 개의 예시
class Account:
def __init__(self, owner):
self.__balance = 0 # 이름 변경을 통해 클래스 외부에서 접근하기 어려운 변수
self.owner = owner
def deposit(self, amount):
if amount > 0:
self.__balance += amount
self.__update_ledger(amount) # 이름 변경을 통해 클래스 외부에서 접근하기 어려운 메소드
def __update_ledger(self, amount):
print(f"{amount}가 입금됐습니다.")
# 외부에서 접근 시도
account = Account("John")
print(account.__balance) # AttributeError 발생
상수
전역 변수와 동일하게 모든 문자를 대문자로 사용하며, 단어간의 구분은 하이픈( '-' )을 이용하여 작성합니다.
예시
- MAX_SIZE
- DEFAULT_TIMEOUT
'Coding > Clean Code' 카테고리의 다른 글
[PEP] 함수 Docstring과 Type Hint 작성 방법 (0) | 2024.06.11 |
---|---|
[Clean Code] 프로그래밍 명명 규칙인 Camel Case, Snake Case, Pascal Case, Kebab Case에 대해 알아보자 (0) | 2024.06.09 |