단일 책임의 원칙
개발-폐쇄의 원칙
리스코프 치환 원칙
인터페이스 분리 원칙
의존성 역전 원칙
하나의 객체는 하나의 역할이 있어야함
클래스나 모듈을 수정하는 이유가 단 하나뿐어야한다.
동작하기만 하는 소프트웨어에 초점을 맞추는 것 보다 깨끗하고 정리된 소프트웨어를 작성하는 것에 초점을 둔다.
확장을 하기위해 개체를 변경해서는 안된다.
기존코드를 변경하지 않아도 새로운 기능이나 구성요소를 추가할 수 있어야 한다.
부모클래스의 행동규약을 자식클래스가 위반하지 않는것
부모 클래스와 자식 클래스가 있는 경우 서로를 바꾸더라도 해당 프로그램에서 잘못된 결과를 도출하지 않는 것
두 클래스를 모두 포함하는 클래스를 구현하여 인터페이스의 역할을 대체한다.