특징
- 코드 재활용성 높일 수 있어 유지보수 용이
- 클래스 간 결합도 낮출 수 있음
- 인터페이스 기반 설계
- 단위 테스트 쉬워짐
// 원래 - 전통적인 코드
// 개발자가 선언하고 내가 객체 생성, 연결
// MyIf, MyIflmpl
MyIF myIf = new MyIFlmpl();
MyIf myIf = MyIflmpl.getInstance();
// spring 코드 - DI
// 변수만 선언하고 객체 생성, 연결을 Spring에 의뢰
// spring이 의뢰된 객체를 생성, 연결해줌
@Autowired
MyIF myIf;
: 부가 기능을 핵심 기능에서 분리해 한 곳으로 관리하게 하고 이 부가 기능을 어디에 적용할지 선택하는 기능을 합한 하나의 모듈
하나의 추상화로 여러 서비스를 묶어둔 것
어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지하여 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위해 사용