한 클래스는 하나의 책임만 가져야 하낟
확장에는 열려있어야 하나 변경에는 닫혀 있어야 하며, 다형성을 활용해야함.
다형성 : 하나의 객체가 여러 가지 타입을 가질 수 있는 것.
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의 인스턴스로 바꿀 수 있어야 함.
상위 타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야함.
비대한 인터페이스 하나보단 더 작고 구체적인 인터페이스로 분리해야함
구현 클래스에 의존하지말고, 인터페이스에 의존 해야함.