# Clean Code

## 주요 내용

잊으면 안되는 것 위주로

### 가독성

* private 메서드 -> 순서에 맞게 읽힐 수 있게 배치
* 카멜케이스
* 자바 컨벤션
* 메서드는 하나의 기능만
* 중복 지양 -> 메서드화
* 메서드화 -> 클래스화
* 필드는 연관된 내용으로 기술 -> **내부응집도 높게, 클래스간 결합도 낮게**

### SOLID

* SRP : 단일책임원칙&#x20;
  * **한 클래스는 하나의 책임**을 가져야한다.
  * 즉, `수정사항이 발생시` 한클래스내에서 책임을 져야하고, **다른 클래스에서 변경 사항이 없어야 한다**
* OCP : 개방폐쇄원칙
  * 확장에는 열려있고, 변경/수정에는 닫혀 있어야한다.&#x20;
* LSP : 리스코프 치환 원칙
  * **프로그램의 객체는 프로그램의 정확성**을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
  * 다형성, 추상화등과 관련 &#x20;
* ISP :  인터페이스 분리 원칙
  * 인터페이스를 모듈화
  * 잘게 분리하여 여러 인터페이스를 implement 할 수 있는 시스템으로 구축
* DIP : 의존관계 역전 원칙&#x20;
  * 추상화된 틀(인터페이스)에 의존해야함. 구현체에 의존해서는 안됨
  * 고수준 모듈과 저수준 모듈에서 고수준 -> 저수준을 의존하는게 흐름상 맞으나 이렇게 하면 의존성이 올라가여 확장성이 떨어짐
  * 고수준에서 인터페이스 등 추상화 제공 -> **저수준에서 인터페이스 구현하여 확장성을 갖도록 유연한 설계**를 하기 위한 원칙&#x20;

### DRY

* Don't Repeat Yourself : 반복을 최소화.중복 제거&#x20;



### KISS

* [https://dzone.com/articles/software-design-principles-dry-and-kiss](https://dzone.com/articles/software-design-principles-dry-and-kiss)
* Keep it short and simple : 단순함을 유지해라.&#x20;



