1990년대 중반 로버트 마틴은 객체 지향 클래스 설계에 관한 다섯가지 원칙을 모아서 유지 보수 가능한 객체 지향 시스템을 제작하는 최상의 지침을 제공했다.
마이클 패더스는 2000년 초, 이 원칙들에 SOLID라는 약어를 붙였다.
클래스는 변경할 때 한 가지 이유만 있어야 한다. 클래스는 작고 단일 목적을 추구한다.
클래스는 확장에 열려엤고 변경에는 닫혀있어야 한다.
기존 클래스의 변경을 최소화 해야한다.
하위 타입은 반드시 상위 타입을 대체할 수 있어야한다.
클라이언트 입장에서 오버라이딩한 메서드가 기능을 깨면 안 된다.
클라이언트는 필요하지 않는 메서드에 의존하면 안 된다.
커다란 인터페이스를 다수의 작은 인터페이스로 분할한다.
고수준 모듈은 저수준 모듈을 의존해서는 안 된다.
둘 다 추상 클래스에 의존해야 한다.
추상클래스는 구체 클래스에 의존해서는 안 된다.
구체 클래스는 추상 클래스에 의존해야 한다.