용어정리
- 인터페이스 : 자바 클래스들이 구현해야하는 동작을 지정하는 용도로 사용되는 추상 자료형이다.
- 자동차와 - k3, 아반떼, 테슬라모델3 에서 “자동차”는 인터페이스이다.

(yoonda.tistory.com)
Solid
클린코드의 대가 로버트 마틴이 2000년대 초반 명명한 객체지향 프로그래밍 설계의 다섯가지 원칙을 정리한것. 유지보수와 확장이 쉬운 시스템을 만들고자하는 상황을 위해 만들어졌다.
- 순수한 자바 코드로 Solid원칙을 지키며 프로그래밍 하다보면 결국 스프링 프레임워크(DI 컨테이너)를 만들게 된다.
SRP - 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야 한다.
- 변경을 기준으로 변경이 있을 때 파급 효과가 적으면 SRP를 따른 것이라 할 수 있다.
OCP - 개방/폐쇄 원칙
5가지 원칙 중 가장 중요한 원칙. 다형성을 활용하면 OCP를 지킬 수 있다.
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 하나를 만드는 것 자체는 기존 코드를 전혀 변경하지 않는 것이다.
- 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하더라도, 클라이언트에서는 코드를 변경하지 않아도 된다.

- 자동차 종류를 확장해도 자동자의 기능(주행, 멈춤등)은 같기 때문에 운전자는 운전법을 배울 필요가 없다.