You will be fine

<토비의스프링> 1.7~1.8 DI

by BFine
반응형

1.7 DI

  • 오브젝트 레퍼런스를 외부로 부터 제공 받고 이를 다이나믹 하게 의존관계를 만듬

  • 세가지 조건

    1. 인터페이스에만 의존해야한다 (클래스 모델, 코드는 몰라야함)

    2. 제 3의 존재(컨테이너, 팩토리 등)가 의존관계를 결정

      • 관계설정 책임을 가진 코드를 분리해서 만들어진 오브젝트(DaoFactory, IoC 컨테이너, Bean 팩토리..)
    3. 의존관계 설정은 사용할 오브젝트의 레퍼런스를 외부에서 제공

  • 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() ->
  • XML문서의 구조를 정의 하는 방법
    • DTD
      • DOCTYPE 형태로 구성
    • 스키마
      • 같은 태그를 사용하려면 스키마파일에 정의되어 있어 네임스페이스를 사용해야함
      • 특별할 이유가 없으면 스키마를 사용하자
  • DataSource 인터페이스 적용
    • 구현해서 사용하는 일이 거의 없음 -> 이미 DB 연결, 풀링 기능을 갖춘 클래스들이 존재
    • driver Class는 java.lang.class 타입인데 XML에서는 텍스트 형태로 사용되네?
      • 스프링이 프로퍼티의 값을 setter 메소드의 파라미터 타입을 참고해서 적절하게 변환

1장 끝

스프링이란 어떻게 오브젝트가 설계&만들어지고 어떻게 관계를 맺고 사용되는지에 관심갖는 프레임워크

  • 질문
    • Spring 컨테이너, IoC컨테이너, DI 컨테이너의 차이는?
반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기