Dependency Injection
- 엔터프라이즈 애플리케이션 개발할 때, 하나의 기능을 처리하기위해 여러 개의 컴포넌트를 조합해서 구현하는 경우가 일반적
- 데이터베이스 컴포넌트
- GUI 관련 컴포넌트
- 외부 접속 컴포넌트
- 다양한 오픈소스 라이ㅂ러리
- 여러 개의 컴포넌트를 통합할 때 의존 관계 주입 디자인 패턴이 매우 효과적
DI
- 의존 관계 주입
- 오브젝트 간의 의존관계를 만듬
- 스프링 프레임워크는 런타임 시 사용할 객체들의 의존 관계를 부여함
- 객체 간의 결합도를 낮춤
IOC
- 역전 제어 -> 인스턴스를 제어하는 주도권이 역전
- 컴포넌트를 구성하는 인스턴스 생성과 의존 관계 연결을 개발자의 소스코드가 아닌 DI 컨테이너가 대신해주기 때문에 제어가 역전되었다고 정의
IOC 컨테이너
- 스프링 프레임워크에서 제공하는 IOC 컨테이너를 통해 인스턴스의 생명주기 관리 및 의존 관계 주입을 처리
일반적인 애플리케이션 의존 관리 - new 연산자 사용
- MemberSampleMain이 MemberService를 new로 생성
- MemberService가 MemberDao를 new로 생성
- 각각의 인스턴스를 이용(Main -> Service -> Dao)
DI 컨테이너를 활용한 애플리케이션 : new 연산자 제거
- MemberService 인스턴스, MemberDao 인스턴스는 DI 컨테이너가 생성 및 관리
- MemberDao 인스턴스를 MemberService에 인젝션(의존 관계 주입)
DI 컨테이너를 활용한 애플리케이션 : 인터페이스 기반의 컴포넌트화
- 인터페이스 기반의 컴포넌트화를 실현하려면 MemberService와 MemberDao를 인터페이스함
- 구현 클래스는 인터페이스 이름에 Impl을 덧붙임