취미가 좋다
클린 코드를 만드는 조건들 본문
1. 이름 정하기
- 길어도 되므로 의미(의도) 전달이 되도록 한다.
- 의미를 전달할 때, 인자를 활용해도 좋다.
- 함수의 역할이 get adults from people 에서 def get_adults(people) 로 이름을 짓는다.
- bool 결과를 내는 함수는 is_ 를 보통 사용한다.
- (ex. is_full( ))
- 상수는 대문자 변수에 저장한다.
- 과도한 줄임말을 쓰지 않는다.
2. 함수
- 함수를 너무 길게 작성하지 않는다.
- 추상화 수준이 낮은 코드들을 묶어서 추상화 수준을 높게 표현하면 가독성이 올라간다.
- 디테일한 부분을 숨긴다.
- 같은 역할을 하는 코드들을 모아 함수로 만든다.
- 과도하게 중복된 if문은 실수를 발생시킬 수 있기 때문에, 빠르게 if문을 빠져나오는 early return을 사용한다.
- 주석 없이 이해할 수 있는 코드가 좋은 코드이다.
- 코드만으로 이해할 수 없을 때 주석을 추가한다.
- 함수 이름에 너무 여러 역할의 의미를 담지 않도록 한다.
- 이름에 담기지 않는 역할까지 하면 나중에 헷갈리고, 역할이 많으면 쪼개는 것이 낫다.
추상화
: 목적을 명확히 하여 복잡한 것은 숨기고 핵심만 드러내는 것
- 추상화 수준이 높다.
- 김밥 준비하겠습니다.
- 나 오늘 프로그래밍 공부했어.
- 스위치 누른다.
- 추상화 수준이 낮다.
- 김밥을 말기 위해서 여러 재료들을 준비하고 밥에 밑간을 하겠습니다.
- 나 오늘 python 반복문에 대해서 공부했어.
- 접점을 이용하여 전자적 충격을 통해 논리회로로 이용한다.
3. 예외 처리
# try except 사용법
try:
arr = [1, 2]
print(arr[3])
4 / 0
except IndexError as e:
print('index error 발생', e)
except ZeroDivisionError as e:
print('zero error 발생', e)
# 예외 발생
def get_video(video, user):
if not user.has_licensed():
raise Exception("사용권이 필요합니다.")
return get_video_contents(video)
- 예외 처리를 통해 어디서 무슨 에러가 발생했는지 알 수 있다.
- 예외를 일부러 발생시킬 수도 있다.
4. 리팩토링
- 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, sw 시스템을 변경하는 프로세스
- 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것
- assert 를 통해서 원하는 결과가 나오지 않을 경우 에러가 뜨도록 한다.
- 임시 변수 제거하기
- 변수가 적을수록 코드를 이해하기 좋다.
- 임시 변수 : 값이 한 번만 대입되고 바뀌지 않는 변수
- 리턴 값을 다른 곳에 저장하고 쓰지 말고, 차라리 가져오는 함수를 여러 번 써라.
- 묶을 수 있는 데이터를 묶는 것이 좋다.
- 여러 값들을 출력해야할 때, 딕셔너리로 한 번에 관리하면 좋다.
- 즉 값들을 계산하여 출력 값으로 바로 내보내는 것이 아니라, 딕셔너리라는 중간 저장소를 만드는 것이다.
- 이를 통해 4.3에서 변수 대신 함수를 쓰면서 길어졌던 코드를 다시 짧아지게 할 수 있다.
Comments