SOLID 원칙
SRP (단일 책임 원칙)
- 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
OCP (개방 폐쇠 원칙)
- 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
- 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
상위 클래스 또는 인터페이스를 중간에 둠으로써 의존성을 줄인다.
LSP (리스코프 치환 원칙)
- 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
- 하위 분류는 상위 분류의 한 종류다.
- 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다.
- 구현 분류는 인터페이스할 수 있어야 한다.
ISP (인터페이스 분리 원칙)
- 클라이언트는 자신의 사용하지 않는 메소드에 의존 관계를 맺으면 안 된다.
- SRP와는 다르게 ISP는 인터페이스로 분리한다.
- 상위 클래스는 풍성할수록 좋다.
- 인터페이스 내에 메소드는 최소한 일수록 좋다.
DIP (의존 역전 원칙)
- 고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 추상화된 것에 의존해야 한다. 추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다. 자주 변경되는 구체(Concrete) 클래스에 의존하지 마라