01. 캡슐화 되어야 한다.
캡슐화 (Encapsulation)
객체의 실제 구현을 외부로부터 감추는 방식
- 클래스를 개발할 때 기본적으로 구현을 감추고, 외부 객체와 상호작용하는 부분만 노출
- 외부의 잘못된 사용 방지
02. 단일 책임 원칙
클래스는 작아야 한다.
클래스가 많은 책임이 한 개인가
* 함수와 마찬가지로 클래스도 작아야 한다.
* 함수는 라인 수로 크기를 측정했는데, 클래스는 맡은 책임의 수로 크기를책정
* 클래스 설명은 if, and, or, but 을 사용하지 않고 25단어 내외로 가능 해야 한다.
단일 책임 원칙 (SRP) 중요성
- 자잘한 단일 클래스가 많아지면 큰 그림을 이해하기 어렵다고 우려.
- 하지만 작은 클래스가 많은 시스템이든 큰 클래스가 몇 개뿐인 시스템이든 돌아가는 부품은 그 수가 비슷.
- 큼직한 다목적 클래스 몇개로 이뤄진 시스템은 당장 알 필요가 없는 사실까지 들이밀어 독자를 방해.
03. 낮은 결합도, 높은 응집도
결합도는 낮을 수록 응집도는 높을 수록 유지 보수성이 좋다.
결합도가 높을 경우
- 연관된 클래스가 변경되면 수정이 필요
- 결합도가 높으면 연관된 클래스들을 모두 이해해야 한다.
응집도가 낮은 경우
- 여러 기능이 있으므로 이해하기 어렵다.
- 재사용하기 어렵다
낮은 결합도
* 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다.
* DIP - 클래스가 상세한 구현이 아니라 추상화에 의존해야한다.
* 추상화를 이용하면 테스트 코드 짜기에 용이한다.
높은 응집도
* 클래스는 인스턴스 변수 수가 적어야 한다. 메서드는 인스턴스 변수를 하나 이상 사용해야 한다.
* 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다 = 서로 관계있는 애들만 모여있다.