📌 지난 게시물에서 배운 내용 되짚기
- 모든 설계에 역할과 구현을 분리하기
- 이상적으로는 모든 설계에 인터페이스를 부여하자 -> 변경의 범위가 작고 유연해짐
- BUT 인터페이스를 도입하면 추상화라는 비용 발생
- 따라서, 기능을 확장할 가능성이 없다면 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링해서 인터페이스를 도입하는 것도 방법이다.
> 스프링 -> 다형성 + OCP,DIP 지원
- DI(Dependency Injection): 의존관계, 의존성 주입
- DI 컨테이너 제공
- 클라이언트 코드의 변경 없이 기능 확장
- 쉽게 부품을 교체하듯이 개발