한 클래스는 하나의 책임만 가져야 한다.
변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다.
다형성을 활용하여 확장에는 열려 있고 변경에는 닫혀 있어야 한다.
-> 기존의 코드를 변경하지 않으면서 확장
모듈을 변경할 때마다 기존 모듈을 수정해야하기 때문에 시간이 오래 걸리고, 오류가 발생하기 쉽기때문이다.
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
추상화에 의존해야지 구체화에 의존하면 안된다.
구체클래스에도 의존을 하게 되면 클래스간 결합도가 올라가
유지보수가 어려워진다.
따라서 추상화에만 의존하여 클래스간 결합도를 낮추어야 유지보수가 쉬워진다.
(의존한다? -> 코드를 알고있다라고 이해하면 된다.)