보기 좋은 코드로 작성하는 것은 프로그래밍 유지 보수를 도와주는 필수 스킬이다.
초심자는 단순히 기술적 지식을 늘리거나, 코드를 작동하게 하는 것에 의의를 두어 이런 부분을 신경쓰지 않을 수도 있다.
하지만 자신의 코드를 나중에 볼 때, 혹은 남에게 보여주며 도움을 구할 때, 함께 프로그래밍 할 때 등
생각보다 가독성 좋은 코드를 작성해야하는 것은 기술을 구현하는 것만큼 중요하다.
지금부터 파이썬만의 가독성 좋은 클린코드를 작성하는 방법을 알아보자.
해당 포스팅은 [클린코드, 이제는 파이썬이다] 저서의 일부입니다.
용어 정리
- Code Formatting : 코드 포매팅, 소스코드에 일련의 규칙을 적용하여 특정 형식을 갖추게 하는 것
- Style Guide : 스타일 가이드는 특정 집단에서 일련의 코드 포메팅 규칙을 간단하게 정리해놓은 것이다. 파이썬에는 Numpy Style Guide, Google Style Guide, PEP8 Style Guide 등이 있다.
- PEP8 : 파이썬에서 가장 잘 알려진 스타일 가이드. 항상 지켜야하는 것은 아니지만, 따르면 좋은 전세계 파이썬 공통 스타일 가이드 정도로 볼 수 있겠다. 단, PEP8 문서 작성자들도 상황에 따라 적절하게 지키지 않아도 된다고 말하고 있다. 결국 높은 비중으로 참고하되, 프로젝트에서 일관성 및 가독성 유지가 목표이니 필요에 따라 일관성을 버려야할 때는 버려라. 라고 말한다.
그렇다면, 가독성을 높여주는 간단한 규칙들을 살펴보자
가로 간격
들여쓰기는 tab 보다 space
- 파이썬은 들여쓰기로 로직을 구분한다. 그만큼 파이썬은 다른 언어보다 들여쓰기에 민감하다.
- 들여쓰기는 tab과 space 4개 모두 가능하지만, space 4개를 사용하자. 혹은 에디터에서 tab을 자동으로 space 4개로 바꾸어주는 기능을 활용하면 유용하다.
- 파이썬3부터는 tab과 space를 함께 사용하여 공백을 구분하면 에러가 난다. 그러니 더더욱 신경쓰자.
코드 내에 공백을 적절히 활용하자
- 연산자와 식별자 사이에 적절한 공백을 넣어주자
code = one[2] + two[three] - four[five + 1:] # Good
code = one[2]+two[three]-four[five+1:] # Bad
- 리스트나 딕셔너리 인자를 구분할 때, 쉼표 뒤에 공백을 준수하자
list = [a, b, c, d] # Good
list = [a,b,c,d] # Bad
list = [a ,b ,c, d] # Bad
- 함수, 메서드, 컨테이너 안에는 공백을 넣지 말자
print( "Bad" )
list = abc[ d ]
- 코드 작성 후 같은 줄에 적힌 주석은 공백 2개를 활용하자 # 이것처럼
세로 간격
사실 세로 간격은 주관적 영향이 크다. 알아서 스타일에 따라 잘 구분하는 것이 중요하다.
클래스 내 메서드는 1줄 개행, 함수나 클래스 사이는 2줄 개행!!
한줄 코드도 가능하지만, 지양하자
if yes: print("yes") # 가능하다. 하지만 가독성이 좋지 않다.
print("one"); print(1) # 세미콜론;을 활용하면 2줄을 1줄로 표현 가능하지만, 굳이?
import에서의 규칙
- import는 무조건 한 줄에 하나만 선언하자
import os
import math # Good
import os, math # Bad
- import 순서는 다음과 같이 3가지 그룹으로 차례로 선언하자
- math, os, sys 등 python 표준 라이브러리
- selenium, Flask 등 파이썬 서드파티 모듈
- 내가 작성한 모듈
반응형
'Python tech > 고급 파이썬 공부' 카테고리의 다른 글
Python 에러 예방하기 (코드 악취 제거하기) (0) | 2023.03.02 |
---|---|
Python 이해하기 쉬운 코드 이름 짓기 (0) | 2023.02.26 |
올바른 코딩 질문하는 방법 (0) | 2023.02.18 |
[파이썬 스킬업 #3] slicing과 key parameter를 활용하자 (1) | 2022.01.26 |
[파이썬 스킬업 #2] unpacking, enumerate, zip 활용하자 (1) | 2022.01.26 |