SOLID는 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리하였다.
이 원칙은 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호한데,(클 수 있고, 작을 수 있다) 문맥과 상황에 따라 다르다.
중요한 기준은 변경이다. 변경이 있을 때, 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예를 들면 UI 변경하거나 객체의 생성과 사용을 분리하는 것이 있다.
확장에는 열려있고, 수정, 변경에는 닫혀있다는 것이 이 원칙이다.
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것은, 다형성을 지원하기 위한 원칙이다. 인터페이스를 구현한 구현체는 믿고 사용하려면 이 원칙이 필요하다.
단순히 컴파일에 성공하는 것을 넘어서는 이야기이다. 예를 들면,자동차 인터페이스에서 엑셀은 앞으로 가라는 기능을 뒤로 가게 구현하면, LSP 위반하게 되고, 느리더라도 앞으로 가야한다.
프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나이다. 쉽게 이야기해서, 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻이다. 객체 세상도 클라이언트가 인터페이스에 의존해야
유연하게 구현체를 변경할 수 있다.