DI(의존관계) 주입

언젠간·2022년 8월 21일
0

토비의스프링

목록 보기
6/16

의존관계란?

  • B가 변하면 A에 영향을 미친다.
  • 의존관계에는 방향성이 있다. A가 B에 의존한다면, B는 A에 의존하지 않는다.

의존관계 종류

  • 코드에서 클래스와 인터페이스 틀 통해 드러나는 의존관계
  • 런타임 시에 오브젝트 사이에서 만들어지는 의존관계 = 의존 오브젝트

의존관계 주입이란?

  • 구체적인 의존 오브젝트와 그것을 사용할 주체, 일반적으로 클라이언트라고 부르는 오브젝트를 런타임 시에 연결해주는 작업
  • 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 인터페이스에만 의존하고 있어야 한다.
  • 런타임 시점의 의존관계는 컨테이너나 팩토리와 같은 제3의 존재가 결정한다.
  • 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 주입해줌으로써 만들어진다.
  • 즉, 설계 시점에는 알지 못했던 두 오브젝트의 관계를 맺도록 도와주는 제 3의 존재가 있다는 것.
  • 제3의 존재란, 애플리케이션 컨텍스트, 빈 팩토리, IoC 등을 의미 함.

의존관계 주입 전

	private ConnectionMaker connectionMaker;
	
	public UserDao3() {
		connectionMaker = new DConnectionMaker();
	}
  • UserDao3은 이미 설계 시점부터 DConnectionMaker라는 구체적인 클래스의 존재를 알고 있다.
  • DConnectionMaker 오브젝트를 사용하겠다는 런타임 의존관계 또한 알고 있다.

의존관계 주입 후

	public class UserDao {
      private ConnectionMaker connectionMaker;

      public UserDao4(ConnectionMaker connectionMaker) {
          this.connectionMaker = connectionMaker;
      }
    }
    
    @Configuration
	public class DaoFactory {
	
      @Bean //스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트 = Bean
      public UserDao userDao() {
  
          return new UserDao(connectionMaker());

      }
                  
      @Bean
      public ConnectionMaker connectionMaker() {
          return new DConnectionMaker();
      }
    }
	
  • DI 컨테이너(DaoFactory)는 자신이 결정한 의존관계를 맺어줄 클래스의 오브젝트(userDao)를 만들고, 이 생성자의 파라미터로 오브젝트(DConnectionMaker)의 레퍼런스 전달 = 런타임 의존관계
profile
코딩왕이될사나이

0개의 댓글