-
파이썬 클린코드 1python 2022. 2. 12. 22:40
소개, 코드 포매팅과 도구
- 클린 코드는 포매팅 이상의 훨씬 중요한 것을 의미한다.
- 때문에 표준 포매팅을 유지하는 것이 유지보수성의 핵심 유의사항이다.
- 파이썬이 제공하는 기능을 사용하여 자체 문서화된 코드를 작성하는 방법
- 코드의 레이아웃을 일정하게 유지하여 팀 멤버들이 문제의 본질을 해결하는데 초점을 맞출 수 있도록 도구를 설정하는 방법
클린 코드의 의미
- 클린코드에 대한 유일하고 엄격한 정의는 없다.
- 수십 년 동안 프로그래밍 언어는 인간의 아이디어를 컴퓨터에 전달하기 위해 사용하는 언어라 생각했지만 틀린 생각이다.
- 프로그래밍 언어의 진정한 의미는 아이디어를 다른 개발자에게 전달하는 것이다.
- 클린 코드 여부는 다른 엔지니어 코드를 읽고 유지보수 할 수 있는지 여부에 달려 있다.
- 클린 코드, 클린 아키텍쳐에 대한 자신만의 정의가 필요하다.
클린 코드의 중요성
- 유지보수 향상, 기술 부채 감소, 프로젝트 성공, 민첩한 개발, 지속적 배포
기술부채
- 부채는 이자를 유발한다.
- 지금 바꾸는 것보다 미래에 변경하는 것이 더 어렵기 때문에 부채이다.
- 코드 수정이 오늘 보다 내일, 내일 보다 모레가 더 어렵다.
클린 코드에서 코드 포매팅의 역할
- 단순히 PEP-8을 준수한다고 클린코드는 아니다.
- 하지만 코드를 올바르게 포매팅 하는 것은 작업을 효율화하기 위해 중요하다.
프로젝트 코딩 스타일 가이드 준수
- 좋은 코드 레이아웃에서 가장 필요한 특성은 일관성이다.
- 한 눈에 읽기 쉽고 이해하기 쉬운 코드 작성하자.
- 표준화된 구조를 사용하면 훨씬 좋을 것이다.
Docstring과 어노테이션
훌륭한 코드는 그 자체로 자명하지만 문서화 또한 잘 되어 있다.
- 문서화는 주석과 다르다.
- 주석은 가급적 피해야 한다.
Annotation
- 동적타입에선 타입을 유추하기 어렵기 때문에 Annotation은 큰 도움이 된다.
- Mypy같은 도구로 자동화 검사까지 할 수 있으니 Annotation은 쓰는게 좋다.
Docstring
- 소스 코드에 포함된 docs.
- 이유가 아니라 설명이다. 이 차이가 중요하다.
- docstring은 코멘트가 아니라 문서이다.
주석은 나쁜놈이다.
- 코드로 아이디어를 제대로 표현하지 못했음을 나타내는 것.
- 불가피한 경우도 있지만 대부분 안좋은 주석이다.
docstring은 좋은놈이다. 가능한 많이 추가해라.
- 파이썬이 동적 타이핑이기 때문에 특히 더 docstring이 필요하다.
docstring의 어려운 점
- 코드와 마찬가지로 지속적인 유지보수가 필요하며, 심지어 상세하게 작성해야 한다.
- 팀원 모두의 공감대가 필요하고, 모두가 노력해야만 한다.
annotation
- annotation을 지정하면
__annotations
속성이 생긴다. 이는 해당 함수, 클래스의 타입힌팅 값을 보여준다.
def my_func(a:str, b:int, c:set, d:dict): pass print(my_func.__annotations__)
{'a': <class 'str'>, 'b': <class 'int'>, 'c': <class 'set'>, 'd': <class 'dict'>}
Anotation은 docstring을 대체하는 것일까?
- 아니다. docstring과 type hinting은 서로 보완적인 개념이다.
- docstring내용을 일부 type-hinting으로 옮길 수 있는건 사실이다만.
- 보다 나은 문서화를 위해 특히 동적 데이터 타입 같은 경우, docstring으로 예상 데이터의 예제를 제공하는 것이 좋다.
- 이를 보고 다른 개발자는 테스트의 성공 실패 여부를 판단하는 등 많은 정보를 얻을 수 있다.
기본 품질 향상을 위한 도구 설정
- 코드 검사 자동화 해놓자!
Mypy를 사용한 타입 힌팅
Pylint를 사용한 코드 검사
'python' 카테고리의 다른 글
파이썬 심화: 변수와 메모리 (0) 2022.02.12 파이썬 클린코드 2 (0) 2022.02.12 엄청 쉬운 python 파일 쓰기, 파일 읽기, 사진 다운받기 (0) 2021.04.06 python sorted key (0) 2021.02.27 sys, os.path.join, os.path.dirname, __file__ (0) 2021.02.15