SOLID
SRP(Single Responsibility Principle, 단일 책임 원칙)
클래스의 기능은 하나의 책임을 수행하는 데 집중해야 함
OCP(Open Close Principle, 개방 폐쇄의 원칙)
확장에는 열려있고 변경에는 닫혀야 함
LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙)
sub class의 객체는 super class의 참조 변수에 대입해서 super class의 역할을 수행하는데 문제가 없어야 함
ISP(Interface Segregation Principle, 인터페이스 분리의 원칙)
인터페이스의 단일 책임을 위한 원칙
DIP(Dependency Inversion Principle, 의존성 역전의 원칙)
구체화에 의존하지 않고 추상화에 의존해야 함