어떤 클래스를 변경해야 하는 이유(책임)은 오직 하나뿐이어야 한다.
소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만, 변경에 대해서는 닫혀 있어야 한다.
서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다.