Clean Code의 목표
- 유지보수성이 높은 SW를 만든다.
Clean Code의 공통적인 특징
- 사람이 읽고 이해하기 쉽다.
- 단순한 한 가지 역할을 하고, 명확한 이름(표현)을 갖고 있다.
- 중복이 없다.
- 테스트 케이스가 있다.
- 이해하기 쉽고, 변경하기 쉬운 코드.
Clean Naming
Clean Naming
- 우리는 개발의 약 75%의 시간을 코드를 읽고 이해하는데 사용한다.
- 변수, 상수, 함수, 클래스, 파일 등 SW의 주요 요소는 이름을 가진다.
- 좋은 이름은 내부를 들여다보지 않아도 동작과 목적을 쉽게 이해할수 있다.
- 좋은 이름을 사용하면 코드를 읽는 사람의 인지적 부하를 최소화 가능하다.
Clean Naming을 만들려면?
- Funtion, Class 역할이 명확하면 Naming도 명확해진다.
- 불필요한 정보/반복은 제거해야 한다.
- 줄임말(약어)를 사용을 자제해야 한다.
- 규칙과 일관성을 중시한다.
- 동료와 상의한다.
Clean Naming Summary
- SW엔지니어는 Code를 읽고 이해하고 수정하는데 대부분의 시간을 사용한다.
- SW 유지보수를 효울적으로 하기 위해서는 높은 가독성이 필수이다.
- 이해하기 쉬운 좋은 이름은 읽는 사람의 인지적 부하를 최소화 시킨다.
- SW 모든 요소들에 좋은 이름 필요하다.
- Variable / Constant
- Method / Function
- Class / File - 가장 중요한 것은 "이 이름이 내 동료가 쉽게 이해 할수 있을까?" 라는 질문한다.
- 동료들과 함께하는 지속적인 개선한다.
Clean Method
Clean Method
- Method / Function은 SW에서 가장 기본이 되는 모듈이다.
- Method를 호출하는 사람이 사용하기 용이 해야 한다.
- Method를 유지보수 하는 사람이 이해하고, 변경하기 용이해야 한다.
- Method를 유지보수 하는 사람이 테스트 하기 용이해야 한다.
Clean Method Priciple
- 가능한 충분히 작아야 한다.
- 한 가지를 해야한다. 그 한가지를 잘해야 한다.
- 테스트 가능해야 한다.
- 중복이 없어야 한다.
Clean Method Parameter Priciple
- Method를 호출하는 사람의 인지적 부하를 최소로 만들어 주어야 한다.
- Method를 호출할 때마다 내부 코드를 보거나 API 문서를 보지 않게해야한다.
- Parameter의 개수는 가능한 적어야 한다.
Clean Method Summary
- Method를 호출하는 사람이 사용하기 용이해야 한다.
- Method를 유지보수 하는 사람이 이해하고, 변경하기 용이해야 한다.
- Method를 유지보수 하는 사람이 테스트 하기 용이해야 한다.
Clean Method 구현 Summary
- 적은 Parameter 개수
- 명확한 Clean Name
- 작은 크기
- 명확한 역할
- 중복 없는 상태
- 높은 테스트 커버리지, 테스트 용이
Clean Formatting
Code Formatting이란?
- Code Formatting은 코드의 가독성과 이해도를 높여주는 일련의 작업이다.
- 수직적 Formatting과 수평적 Formatting 원칙으로 분류된다.
수직적 Formatting
- 코드의 위에서 아래로 진행된 흐름과 관련 도니 코드 작성 규칙
- 코드 라인간 간격, 밀접한 관계를 가지는 코드 간 그룹화 등이 포함
- 추상화의 수준 순서대로 코드를 배치
- 서로 다른 개념은 분리
- 유사한 개념은 모아 놓음
- 관계있는 내용은 가까운 행에 작성
수평적 Formatting
- 하나의 코드 행에서 왼쪽에서 오른쪽으로 진행된 흐름과 관련된 코드 작성 규칙
- 들여쓰기, 코드 간 간격, 코드 행의 넓이 등이 포함
- 들여쓰기를 적극적으로 활용
- 한줄의 긴 코드를 여러줄의 짧은 코드로 분리
- 수평정렬은 중요하지 않음
Code Formatting Summary
- 좋은 코드는 문학 작품과 같이 읽을수 있어야한다.
- Formatting은 동작에는 영향을 미치지 않으나 가독성에는 크게 영향을 미친다.
- 조직 내 규칙을 정햐야 하고, 모든 개발자는 규칙에 따라 Formatting해야한다.
- 코드 리뷰와 정적 분석 도구를 활용하여 Formatting을 지속적으로 확인해야 한다.
Clean Control Structure
Control Structures란?
- 조건 루프, 흐름은 제어하는 선언문
Control Structures와 Clean Code
- Control Structures는 코드 복잡도에 가장 큰 영향을 주는요소
- 특히 중첩된 Control Structures는 코드 가독성, 테스트 용이성 떨어지고, 복잡도는 올라감
Clean Control Structures
- 개발 초기부터 코드 복잡도를 고려한 Control Structures의 설계가 중요
- 읽기 쉬운 조건문- Fail Fast!, Early Return!
- 최대한 긍정으로 표현하라
Clean Control Structures : Summary
- Control Structures는 신경 쓰지 않으면 복잡도를 증가시킴
- 가독성을 심각하게 저해하고- 테스트를 어렵게 만듬
- Control Structures 최대한 이해하기 쉽고 중첩이 적은 방향으로 설계, 작성
- Fail Fast!, Early Return!또는 Method 추출 기법으로 가독성 향상이 가능한지 항상 확인해야한다.
Clean Code를 위한 Code Refactoring
Refactoring
- SW품질 향상을 목적으로 기능의 변경 없이, 내부 코드를 변경하는 기술
Refactoring 철학
- 티끌모아 태산
- 기존 기능에 변경을 가하지 않는 수준의 아주 작은 코드 개선 작업
- 하나 하나의 Refactoring은 너무 작아서 큰의미 없음
- 작은 개선이 쌓여 의미있는 품질향상이 가능
Code Bad Smell
- Clean 품질은 저해 할수 있는 가능성을 가진 코드가 보내는 경고 싸인
- Code Bad Smell은 결함이나 에러는 아님
- 22개의 Code Bad Smell 종류
Refactoring 카탈로그
- Code Bad Smell에 대한 다양한 개선 적략들의 모음
- Refactoring은 아주 작은 개선 활동
- 너무 당연하다고 판단 될만한 전략들도 다수 존재
Code Refactoring : Summary
- ReFacoring 은 매일 지속적으로 수행하는 작은 코드 개선 작업
- 티끌모아 태산
- 개선해야할 코드의 Bad Smell을 맡는 민감한 코를 갖도록 훈련해야함
- 정리된 Code Bad Smell과 Refactoring Catalog를 참고하는건 좋은 습관