Single Responsibility Principle
모든 클래스는 각각 하나의 책임만 가져야 한다.
Open Closed Principle
유지 보수 시 기존 코드들은 변경 사항이 적도록 하며, 확장이 용이해야 한다.
Liskov Substitution Principle
객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 상속이 문제 없도록 잘 작동해야 한다는 뜻.
Interface Segregation Principle
하나의 일반적인 인터페이스 대신 구체적인 여러 개의 인터페이스를 제작할 것
Dependency Inversion Principle
상위 계층은 하위 계층의 변화로부터 독립할 것, 자신보다 변하기 쉬운 것에 영향을 받지 않도록 상위 클래스나 추상화 인터페이스를 두어야 한다.