티스토리 뷰

etc.

[기타] 클린코드 Clean code 요약

Kim_Baechu 2022. 4. 12. 16:12

Summary of 'Clean code' by Robert C. Martin

https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29

기본 규칙

  1. 스탠다드 컨벤션을 지켜라.
  2. 간단함을 유지하라. 간단할수록 좋다. 복잡도를 최대한 줄여라.
  3. 보이스카우트 규칙. 캠프장을 발견했을 때보다 더 깨끗하게 하고 떠나라
  4. 근본적인 원인을 찾아라. 항상 문제의 근본을 찾아라.

디자인 규칙

  1. 설정 가능한 데이터를 높은 수준으로 유지하라.
  2. if/else나 switch/case 대신 다형성을 선호하라.
  3. 다중 스레드 코드를 분리하라.
  4. 과도한 설정가능함 배제라.
  5. 의존성 주입을 사용하라.
  6. 디미터의 법칙을 따르라. 클래스는 직접적인 종속성만 알아야 한다.

이해가능성 팁

  1. 일관성을 유지하라. 어떤 방식으로 어떤일을 처리하면, 비슷한 건 같은 방법으로 처리하라.
  2. 설명 변수를 사용하라. (Use explanatory variables.)
  3. 경계 조건(Boundary conditions)을 캡슐화하라. 경계 조건은 추적하기 힘들다. 그것들을 한 곳에서 처리하라.
  4. 원시 타입보다 전용 밸류 오브젝트를 선호하라.
  5. 논리적 의존성을 피하라. 같은 클래스의 다른 것에 의존해서 동작하는 메서드를 작성하지 마라.
  6. 부정 조건을 피하라.

이름 규칙

  1. 모호하지 않고 설명하는 이름을 사용하라.
  2. 의미있는 차이를 만들어라.
  3. 발음 가능한 이름을 사용하라.
  4. 검색 가능한 이름을 사용하라.
  5. 매직 넘버를 이름있는 상수로 바꿔라.
  6. 인코딩을 피하라. 접두사나 타입 정보를 추가하지 마라.

함수 규칙

  1. 작게!
  2. 하나만 하라.
  3. 설명적인 이름 사용하라.
  4. 인수를 적게 하라.
  5. 사이드 이펙트가 없게 하라.
  6. 플래그 인수를 하용하지 마라. 메서드를 플래그 없이 클라이언트에서 호출할 수 있는 독립적인 메서드로 분리하라.

주석 규칙

  1. 항상 코드 내에서 설명하려고 하라.
  2. 장황하게 쓰지마라.
  3. 명백한건 쓰지마라.
  4. 닫는 괄호를 쓰지마라.
  5. 코드를 주석처리하지말고, 제거하라.
  6. 의도를 설명하기 위해 사용하라.
  7. 코드를 명확하게 하기 위해 사용하라.
  8. 결과에 대한 경고로 사용하라.

소스코드 구조

  1. 개념을 수직적으로 분리하라.
  2. 관련된 코드는 수직적 밀도로 나타나야한다.
  3. 변수를 사용하는 곳에 가깝게 위치하라. (Declare variables close to their usage.)
  4. 의존하는 함수는 가까이 있어야 한다.
  5. 비슷한 함수는 가까기 있어야 한다.
  6. 함수를 아래 방향으로 놓아라. (Place functions in the downward direction.)
  7. 라인을 짧게 하라.
  8. 수평 정렬을 사용하지 마라.
  9. 관련된 것을 연관짓고, 관련 없는 것을 분리하기 위해 공백을 사용하라.
  10. 들여쓰기를 깨지 마라.

객체와 자료구조

  1. 내부 구조를 숨겨라.
  2. 자료구조를 선호하라.
  3. 하이브리드 구조를 피하라.(반은 오브젝트 반은 데이터)
  4. 작아야 한다.
  5. 한 가지만 하라.
  6. 인스턴스 변수 개수를 적게.
  7. base 클래스는 그들의 파생물에 대해 알지 못해야 한다.
  8. 동작을 선택하기 위해 코드를 함수로 전달하는 것보다 많은 함수를 가지고 있는게 낫다.
  9. non-static 메서드를 static메서드 보다 선호하라.

테스트

  1. 하나의 테스트에 하나의 결과
  2. 읽을 수 있게
  3. 빠르게
  4. 독립적인
  5. 반복적인

나쁜 코드

  1. 경직성. 바꾸기 어려운 소프트웨어. 작은 변화가 연쇄적인 후속 변화를 야기한다.
  2. 취약성. 작은 변화 때문에 소프트웨어 여러 곳이 고장난다.
  3. 이동성 없음. 관련된 위험과 높은 노력 때문에 코드의 일부를 다른 프로젝트에서 재사용할 수 없다.
  4. 불필요하게 복잡함
  5. 불필요하게 반복함
  6. 불투명. 코드를 이해하기 어렵다.
댓글
공지사항