- 응집도는 높이고 결합도는 낮추는 원칙을 객체 지향의 관점에서 재정립 한 5원칙에 대해 설명한다
SRP(Single Responsibility Principle) - 단일 책임 원칙
- 클래스를 책임과 역할에 따라 분리해서 각각 하나의 책임과 역할만 갖게 한다
- 추상화를 통해 클래스를 선별하고 속성과 메서드를 설계할 때 반드시 단일 책임 원칙을 고려하도록 한다
OCP (Open Closed Principle) - 개방 폐쇄 원칙
- 자신의 확장에는 열려있고 주변의 변화에는 닫혀있어야 한다
- 대표적인 예로 JDBC가 있다
- 개방 폐쇄 원칙을 무시하고 프로그램을 작성하면 유연성, 재사용성, 유지보수성 등을 얻을 수 없다
LSP (Liskov Subsitution Principle) - 리스코프 치환 원칙
- 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다 즉 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없다
- 하위 클래스 is a kind of 상위 클래스
- 구현 클래스 is able to 인터페이스
- 위 문장들을 잘 지켰다면 리스코프 치환 원칙을 잘 지키고 있다고 할 수 있다
ISP (Interface Segregation Principle) - 인터페이스 분리 원칙
- 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다
- 단일 책임 원칙과 인터페이스 분할 원칙은 같은 문제에 대한 두 가지 다른 해결책이라고도 볼 수 있다
- 인터페이스는 최소한의 기능을 제공해야 한다
DIP (Dependency Inversion Principle) - 의존 역전 원칙
- 추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화 된 것에 의존해야 한다
- 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향을 받지 않게 하는 것이 의존 역전 원칙이다
- 상위 클래스일수록, 인터페이스일수록, 추상 클래스일수록 변하지 않을 가능성이 높기에 하위 클래스나 구체 클래스가 아닌 상위 클래스, 인터페이스, 추상 클래스를 통해 의존하라는 것
정리
- 객체 지향의 4대 특성을 잘 활용한 결과로 나타나는 원칙
- SoC (Seperation Of Concerns) : 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모으고 관심이 다른 것은 간으한 따로 떨어져 서로 영향을 주지 않도록 분리하라는 것
- 결론적으로 객체 지향을 잘 이해하고 프로그래밍을 하면 SOLID 원칙은 자연스럽게 지켜진다