1. 개방 폐쇄 원칙 - Open-Closed Principle (OCP)
- 클래스나 모듈은 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
- 해석: 어떤 클래스의 기능을 확장할 때, 그 클래스의 코드는 변경이 되면 안된다.
- 예시: PaymentService의 기능(Provider)을 추가할 때, PaymentService가 변경되진 않아야 한다.
2. 높은 응집도와 낮은 결합도
응집도
- 응집도가 높다는 것은 하나의 모듈이 하나의 책임 또는 관심사에 집중되어있다는 뜻이다.
- 여러가지 책임을 가지고 있다면, 변화가 일어났을 때 변경에 대한 검증이 매우 어렵고 복잡해진다.
- 하지만 하나의 책임에만 집중될 수 있도록 설계한다면, 변화가 크더라도 해당 모듈만을 검증하면 충분하다.
결합도
- 어떤 모듈의 책임과 관심사가 다른 모듈과는 낮은 결합도, 즉 느슨하게 연결된 형태를 유지하는 것이 바람직하다.
3. 의존성 역전 원칙(DIP)
- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다.
- 추상화는 구체적인 사항에 의존해서는 안 된다. 구체적인 사항은 추상화에 의존해야한다.
1) DIP가 지켜지지 않은 예시
- 상위수준의 모듈이 하위 수준의 모듈에 의존하고 있고, PaymentService는 추상화에 의존하지 않고 있다.
