이 글은 본인이 공부한 Clean Code 내용을 주기적으로 리마인드하기 위한 글이다. 그렇기에 글을 읽는 다른 독자들에게는 글을 이해하기 위한 자세한 설명이 다소 부족할 수 있다.
- 의미있는 변수 이름을 사용
- 발음할 수 있는 변수 이름을 사용
- 동일한 유형의 변수는 동일한 단어를 사용
- 검색할 수 있는 이름을 사용
- 의도를 나타내는 변수를 사용
- 암시하는 이름은 사용 ❎ ➡️ 명시적 이름 사용
- 불필요한 문맥은 추가 ❎
- short circuiting이나 조건문 대신 기본 매개변수를 사용
- 의도를 알려주기 위해 enum을 사용
- 함수의 매개변수는 2개 혹은 그 이하가 이상적이다
- 함수는 한 가지만 해야한다
- 함수가 무엇을 하는지 알 수 있도록 함수 이름을지어야 한다
- 함수는 단일 행동을 추상화해야 한다
- 중복된 코드를 제거
- Object.assign 혹은 구조 분해를 사용해서 기본 객체를 만들어야 한다
- 함수 매개변수로 플래그를 사용 ❎
- 사이드 이펙트를 피해야 한다
1. 함수는 값을 가져와서 다른 값을 반환하는 것 이외에 다른 것(전역 변수 조작 등)을 할 경우 사이 드 이펙트를 발생시킬 수 있다.
2. 참조 값을 수정 사용 시, 원본 자체를 변경하기보다는 원본을 복사한 후 수정해서 사용하는 것이 좋다.- 전역 함수를 작성 ❎
- 명령형 프로그래밍보다 함수형 프로그래밍을 지향
- 조건문을 캡슐화
- 부정 조건문 ❎
- 조건문 지양
- 타입 체킹을 피해야 한다.
- 필요 이상으로 최적화 ❎
- 필요하지 않는 코드는 제거
- iterator와 generator를 사용
- getter와 setter를 사용
- private/protected 멤버를 갖는 객체를 생성
- 불변성을 선호 (readonly)
- 리터럴 값을 위해 const assertions를 사용
- 타입 vs 인터페이스
1. 합집합 또는 교집합이 필요할 때 타입을 사용
- extends 또는 implements가 필요할 때 인터페이스를 사용
- 클래스는 작아야 한다
- 높은 응집도와 낮은 결합도
- 상속(inheritance)보다 조합(composition)을 사용
- 메소드 체이닝을 사용
- SOLID
1. 단일 책임 원칙 (SRP)
- 개방 폐쇄 원칙 (OCP)
- 리스코프 치환 원칙 (LSP)
- 인터페이스 분리 원칙 (ISP)
- 의존성 역전 원칙 (DIP)
TDD의 세 가지 법칙
1. 실패하는 단위 테스트를 작성하기 전에는 실제 코드를 작성 ❎ 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성 3. 실패하는 단위 테스트를 통과할 정도로만 실제 코드를 작성
F.I.R.S.T 규칙
**Fast : ** 테스트는 빈번하게 실행되므로 빨라야 한다. **Independent : ** 테스트는 서로 종속적이지 않으며, 독립적으로 실행하든지 순서 상관없이 모두 실행하든지 동일한 결과가 나와야 한다.
Repeatable : 테스트는 어떤 환경에서든 반복될 수 있습니다. 테스트가 실패하는데에 이유가 없어야 한다.
Self-Validating : 테스트는 통과 혹은 실패로 답해야 한다. 테스트가 통과되었다면 로그 파일을 보며 비교할 필요는 없다.
Timely : 단위 테스트는 실제 코드를 작성하기 전에 작성해야 한다. 실제 코드를 작성한 후에 테스트를 작성한다면, 테스트를 작성하는 것이 너무 고단하게 느껴질 것이다.
- 테스트의 이름은 테스트의 의도가 드러나야 합니다
- 동시성 - async / await
async / await 구문을 사용하면 연결된 프로미스 구문보다 훨씬 더 명료하고 이해하기 쉬운 코드를 작성할 수 있다.
- throw 또는 reject 구문에서 항상 Error 타입을 사용
- catch 절에서 에러 처리 부분을 비워두기 ❎
- 요청이 거부된 프로미스 객체 무시 ❎
- 일관적으로 대소문자를 사용
- 함수 호출자와 피호출자를 가깝게 위치
- import 구문을 특정 순서대로 정리
- 타입스크립트 앨리어스를 사용
- 주석 대신에 자체적으로 설명 가능한 코드를 작성
- 코드자체 주석 처리 ❎
- 일기 같은 주석 ❎
- 코드의 위치를 설명하는 주석 ❎
- TODO 주석 - 추후에 개선을 위해 코드에 메모를 남겨야할 때
참조 :