> For the complete documentation index, see [llms.txt](https://dodeon.gitbook.io/study/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dodeon.gitbook.io/study/kimyounghan-spring-core-principle/01-oop-spring/oop-spring.md).

# 객체 지향 설계와 스프링

스프링은 DI와 DI 컨테이너로 다형성, OCP, DIP를 가능하게 지원해준다.

## 정리

* 모든 설계에 역할과 구현을 분리해야 한다.
  * 자동차 예시를 떠올려보자.
* 애플리케잇연 설계도 언제든지 유연하게 변경할 수 있어야 한다.
* 이상적으로는 모든 설계에 인터페이스를 부여하는 게 좋다.
  * 하지만 추상화하는 비용이 발생한다.
  * 기능을 확장할 가능성이 없다면 구체 클래스를 직접 사용한다.
  * 향후 꼭 필요할 때 리팩터링 해서 인터페이스를 도입하는 것도 방법이다.
