1. 단일 책임 원칙 - 객체는 단 하나의 책임만 가져야 한다. 2. 개방-폐쇄 원칙 - 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. 3. 리스코프 치환 원칙 - 자식 클래스는 최소환 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다. 4. 의존 역전 원칙 - 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운것, 거의 변화가 없는 것에 의존한다. 5. 인터페이스 분리 원칙 - 인터페이스를 클라이언트에 특화되도록 분리시키라는 설계 원칙