<토비의스프링> 1.7~1.8 DI
by BFine반응형
1.7 DI
오브젝트 레퍼런스를 외부로 부터 제공 받고 이를 다이나믹 하게 의존관계를 만듬
세가지 조건
인터페이스에만 의존해야한다 (클래스 모델, 코드는 몰라야함)
제 3의 존재(컨테이너, 팩토리 등)가 의존관계를 결정
- 관계설정 책임을 가진 코드를 분리해서 만들어진 오브젝트(DaoFactory, IoC 컨테이너, Bean 팩토리..)
의존관계 설정은 사용할 오브젝트의 레퍼런스를 외부에서 제공
UserDao --> ConnectionMaker
런타임이 아닌 설계단계에서는 의존관계를 알수 없어야함
connectionMaker = new DconnctionMaker() // 코드로 보여짐 public UserDao(ConnectionMaker connectionMaker){ this.connectionMaker = connectionMaker }
DaoFactory를 이용하면 런타임에 의존관계를 맺을 수 있음
- 제 3의 존재, 오브젝트의 생성 초기화 등을 수행하는 컨테이너 == DI 컨테이너
DI는 사용할 오브젝트에 대한 선택&생성 제어권을 외부로 넘기고 수동적으로 주입받은 오브젝트를 사용
의존관계 검색(DL)
자신이 필용로 하는 의존 오브젝트를 능동적으로 찾음(찾기만 ...)
context.getBean 메서드를 사용하여 의존 주입
DL은 스프링 오브젝트 팩토리 클래스나 스프링 API가 나타남, Dao에 이런 코드가 나타나는 건 어색
DL은 자신이 스프링빈일 필요 없음
의존오브젝트 : 런타임 시에 의존관계를 맺는 실제 사용되는 오브젝트를 의존 오브젝트
DI의 장점
코드에는 런타임 클래스에 대한 의존관계가 나타나지 않고 인터페이스를 통해 결합도가 낮은 코드 만듬
다른책임을 가지는 의존 대상이 바껴도 자신은 영향 받지 않고 확장방법에는 자유로움
@Bean public ConnectionMaker connectionMaker(){ return new LocalDBconnectionMaker(); // return new ProductionDBconnctionMaker(); }
메서드를 이용한 의존관계 주입
- setter(수정자)를 이용한 주입
- 일반메서드를 이용한 주입
1.8 XML
- 자바코드로 만들기 번거롭다 -> XML로 하자
- 단순 텍스트파일으로 다루기 쉽다
- 컴파일과 같은 별도의 빌드 작업이 없다
- XML 설정
- @Configuration ->
- @Bean methodName() ->
- @Configuration ->
- XML문서의 구조를 정의 하는 방법
- DTD
- DOCTYPE 형태로 구성
- 스키마
같은 태그를 사용하려면 스키마파일에 정의되어 있어 네임스페이스를 사용해야함 - 특별할 이유가 없으면 스키마를 사용하자
- DTD
- DataSource 인터페이스 적용
- 구현해서 사용하는 일이 거의 없음 -> 이미 DB 연결, 풀링 기능을 갖춘 클래스들이 존재
- driver Class는 java.lang.class 타입인데 XML에서는 텍스트 형태로 사용되네?
- 스프링이 프로퍼티의 값을 setter 메소드의 파라미터 타입을 참고해서 적절하게 변환
1장 끝
스프링이란 어떻게 오브젝트가 설계&만들어지고 어떻게 관계를 맺고 사용되는지에 관심갖는 프레임워크
- 질문
- Spring 컨테이너, IoC컨테이너, DI 컨테이너의 차이는?
반응형
'개발서적 > 토비의스프링' 카테고리의 다른 글
<토비의스프링> 6.4~6.5 AOP(2) (0) | 2021.02.20 |
---|---|
<토비의스프링> 6.1~6.3 AOP (0) | 2021.02.18 |
<토비의스프링> 5.1~5.2 서비스추상화 (0) | 2021.02.17 |
<토비의스프링> 4.1~4.2 예외 (0) | 2021.02.17 |
<토비의스프링> 3.1~3.5 템플릿 (0) | 2021.02.16 |
블로그의 정보
57개월 BackEnd
BFine