1. 깨끗한 코드
- 깨끗한 코드는 한가지에 집중한다.
- 각 함수와 클래스와 모듈은 주변 상황에 현혹 되거나 오염되지 않은 채 한 길만 걷는다.
- 깨끗한 코드는 주의 깊게 작성한 코드다. 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다. 세세한 사항까지 꼼꼼하게 신경 쓴 코드다. 주의를 기울인 코드다.
- 보이스카우트 규칙
- 체크아웃할 때보다 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다.
- 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다.
- 캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라!
2. 의미 있는 이름
- 의도를 분명히 밝혀라.
- 그릇된 정보를 피하라.
- 의미 있게 구분하라.
- 발음하기 쉬운 이름을 사용하라.
- 검색하기 쉬운 이름을 사용하라.
- 인코딩을 피하라.
- 자신의 기억력을 자랑하지 마라.
- 기발한 이름은 피하라
- 한 개념에 한 단어를 사용하라.
- 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.
- 나쁜예 : fetch, retrieve, get
- 말장난을 하지 마라 (맥락을 고려하여 사용하라)
- add : 두개를 더한다.
- append : 집합에 값 하나를 추가한다.
- 해법 영역에서 가져온 이름을 사용하라.
- Factory 패턴 : VehicleFactory
- 문제 영역에서 가져운 이름을 사용하라.
- 적절한 용어가 없을 경우 문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져온다.
- 의미 있는 맥락을 추가하라
- 불필요한 맥락을 없애라.
3. 함수
- 작게 만들어라.
- 한 가지만 해라!
- 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
- 서술적인 이름을 사용하라.
- 함수가 하는 일을 좀 더 잘 표현해야 좋은 이름이다.
- 함수 인수
- 동사와 키워드
- 동사 : 함수와 인수가 동사/명사 쌍을 이룬다.
- 키워드 : 함수 이름에 인수 이름을 넣는다.
- 동사와 키워드
- 부수 효과를 일으키지 마라.
- 남 몰래 다른짓을 해선 안된다.
- 명령과 조회를 분리하라.
- 오류 코드보다 예외를 사용하라.
4. 주석
- 코드로 의도를 표현하지 못해 실패를 만회하기 위해 주석을 사용한다. 우리에게 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면 주석은 거의 필요하지 않다.
- 코드로 의도를 표현하라.
- 좋은 주석
- 법적인 주석
- 정보를 제공하는 주석
- 의도를 설명하는 주석
- 의미를 명료하게 밝히는 주석
- 결과를 경고하는 주석
- TODO 주석
- 중요성을 강조하는 주석
5. 형식 맞추기
- 형식을 맞추는 목적
- 코드 형식은 의사소통의 일환이다.
- 적절한 행 길이를 유지하라.
- 일반적으로 200줄 미만.
- 신문 기사처럼 작성하라.
- 이름은 간단하면서도 설명이 가능하게 짓는다.
- 소스 파일의 첫 부분은 고차원 개념과 알고리즘을 설명하고 아래로 내려갈수록 의도를 세세하게 묘사한다.
- 개념은 빈 행으로 분리하라.
- 세로 밀집도는 연관성을 의미한다.
- 변수 선언은 사용위치에 최대한 가까이 선언한다.
- 인스턴스 변수는 클래스 맨 처음에 선언한다.
- 종속함수
- 다른 함수를 호출한다면 두 함수는 세로로 가까이에 위치 시킨다.
- 호출하는 함수는 호출되는 함수보다 먼저 배치한다.
- 개념적으로 유사한 코드는 가까이에 배치한다.
- 가로 길이 80자 이내.
- 팀은 한 가지 규칙에 합의해야 하고, 팀원은 그 규칙을 따라야 한다.
6. 객체와 자료구조
- 객체는 동작을 공개하고 자료를 숨긴다.
- 자료구조는 자료를 공개하고 별다른 함수를 제공하지 않는다.
- 비즈니스 규칙을 담지 않는다.
7. 오류처리
- 오류코드 보다 예외를 사용하라
- null 을 반환하지 마라
- null 을 전송하지 마라
8. 경계
- 외부라이브러니나 컴포넌트는 Adapter 패턴을 사용하여 우리가 원하는 인터페이스로 변환하라.
9. 단위테스트
- 테스트 함수 하나는 개념 하나만 테스트 하라.
- 개념 하나당 assert 문을 최소로 줄여라.
- F.I.R.S.T
- F (Fast) : 테스트는 빨리 돌아야 한다.
- I (Independent) : 각 테스트는 서로 의존하면 안 된다.
- R (Repeatable) : 어떤 환경에서도 반복 가능해야 한다.
- S (Self-Validating) : 부울 (bool) 값으로 결과를 내야 한다.
- T (Timely) : 적시에 작성해야 한다.
10. 클래스
- 큰 클래스 몇개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직 하다.
- SRP 를 지켰기 때문.
- 클래스는 인스턴스 변수 수가 작아야 한다. 인스턴스 변수를 메서드 마다 사용하는 클래스는 응집도가 가장 높다.
- 클래스가 응집력을 잃는다면 쪼개라.
11. 창발성
남이 모르거나 하지 아니한 것을 처음으로 또는 새롭게 밝혀내거나 이루는 일.
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머의 의도를 표현한다.
- 클래스와 메서드 수를 최소로 줄인다.
12. 동시성
- SRP 를 준수한다.
- 동시성 오류를 일으키는 잠정적인 원인을 철저히 이해한다.
- 사용하는 라이브러리와 기본 알고리즘을 이해한다.
- 초반에 드러나지 않는 문제는 일회성으로 치부하지 마라.
'프로그램' 카테고리의 다른 글
Clean Architecture (2) | 2024.02.20 |
---|