SOLID
SRP : 단일 책임 원칙
객체는 오직 하나의 책임을 가져야한다.
OCP : 개방-폐쇄 원칙
객체는 확장에 대해서 개방적이고 수정에 대해서 폐쇄적이어야한다.
LSP : 리스코프 치환 원칙
자식 클래스는 언제나 부모 클래스를 대체할 수 있어야한다.
ISP : 인터페이스 분리 원칙
클래스는 사용하지 않는 인터페이스를 구현해선 안 된다.
DIP : 의존성 역전 원칙
추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안 된다.