좋은 소프트웨어는 변화에 잘 대응해야 한다.
시스템에 새로운 요구사항이나 변경사항이 있을 때 영향 받는 범위가 작고 확장성 있는 시스템 구조를 만들 수 있어야 한다. SOLID 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트의 개발 생산성을 높일 수 있다.
단일 책임 원칙은 클래스는 단 하나의 책임만 가져야 한다는 원칙으로, 여기서 책임은 하나의 기능 담당으로 보면 된다.
하나의 클래스는 하나의 기능을 담당하여 하나의 책임을 수행하는데 집중되도록 클래스를 따로 여러개 설계하는 원칙이다.
만약 하나의 클래스에 기능이 여러개 있다면 기능 변경이 일어났을때 수정해야 할 코드가 많아진다. A를 고치면 B를 수정해야하고 B와 연결된 C를 수정해야하는 순환적인 형태가 되기때문에 SRP원칙을 따르면 하나의 책임 변경으로부터 다른 책임의 변경으로 연쇄작용을 막을 수 있다.
단일 책임 원칙의 목적은 프로그램의 유지보수 성을 높이기 위한 기법이다.
개방 폐쇄 원칙은 클래스는 확장에 열려있어야 하며 수정에는 닫혀있어야 한다는 원칙이다.
기능의 추가 요청이 오면 클래스를 확장을 통해 쉽게 구현하면서 확장에 따른 클래스 수정은 최소화 되도록 프로그램을 작성하는 기법이다.
개방 폐쇄 원칙의 목적은 다형성과 확장을 가능하게 하는 객체지향의 장점을 극대화 하기 위한 기법이다. 추상 클래스와 상속을 통한 클래스 관계 구축을 말하는 것이다.
리스코프 치환 원칙은 서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다는 원칙이다. 다형성의 원리를 이용하기 위한 원칙으로 다형성의 특징ㅇ을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면, 업캐스팅된 상태에서 부모의 메서드를 사용해도 동작이 의도대로 흘러가야 하는 것을 의미한다.
리스코프 치환 원칙에서는 부모 메서드의 오버라이딩을 조심스럽게 따져가며 해야한다. 부모클래스와 동일한 수준의 선행조건을 기대하고 사용하는 프로그램 코드에서 예상치 못한 문제를 일으킬 수 있기 때문이다.
인터페이스 분리 원칙은 인터페이스를 각각 사용에 맞게 끔 잘게 분리해야한다는 원칙이다.
SRP가 클래스의 단일 책임을 강조 한다면 ISP는 인터페이스의 단일 책임을 강조한다. 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공하는 것이 목표이다. 다만 한번 인터페이스를 분리하여 구성해놓고 나중에 무언가 수정사항이 생겨서 또 인터페이스들을 분리하는 행위는 하지 않아야한다.
어떤 클래스를 참조해서 사용해야하는 상황이 생긴다면 그 클래스를 직접 참조하는 것이 아니라 그 대상의 상위 요소로 참조하라는 원칙이다. 구현 클래스에 의존하지 말고, 인터페이스나 추상 클래스에 의존하라는 뜻이다. 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는, 변화하기 어려운 것, 거의 변화가 없는 것에 의존하는 것이다.
의존 역전 원칙은 각 클래스간의 결합도를 낮추는 것이다.