SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)
▶︎ 하나의 클래스에는 하나의 책임만 져야 한다.
▶︎ 책임이 많으면 코드끼리 결합도를 높일 가능성이 높다. 따라서 다양한 사유로 코드가 변경 될 수 있다.
▶︎ 변경에 유연 / 이해하기 쉽게 / 재사용에 용이한 컴포넌트의 기반
▶︎ 확장에는 열려있고, 수정에는 닫힌코드를 개발
▶︎ 변경되는 것과 그렇지 않을 것을 구분, 두 지점이 만나는 곳에 인터페이스를 정의. 확장되는 부분이 인터페이스에 의존하기 때문에 내부코드를 수정하지 않아도 됨.
▶︎ 서브타입은 언제나 기반 클래스로 교체할 수 있어야 한다.
▶︎ 부모클래스 대신 자식 클래스를 가져다 써도 코드에 문제가 없어야 한다.
▶︎ 상속 관계에서는 일반화 관계가 성립해야 한다. 일반화 관계에 있다는 것은 일관성이 있다는 것이다.
▶︎ 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의 하지 않고 확장만 수행해야 한다.
▶︎ 하나의 일반적인 인터페이스 보다 여러개의 구체적인 인터페이스가 낫다.
▶︎ 인터페이스를 사용하면 유연한 구조와 결합도가 낮아지며, 불필요한 컴파일과 재배포를 막을 수 있다.
▶︎ 의존관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다 변화하기 어려운것, 거의 변화가 없는 것에 의존해야 한다.
▶︎ 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺어야 한다.