SRP, DIP, OCP
한 클래스는 하나의 책임만 가져야 한다.
프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나다.
소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다.