IoC, DI, 컨테이너

1. 제어의 역전 IoC

2. 의존 관계 주입 DI

  • 클라이언트는 인터페이스에 의존하기 때문에 실제 어떤 구현 객체가 사용될 지 모름.
  • 의존 관계는 정적인 클래스 의존 관계와 실행 시점 결정되는 동적 객체(인스턴스) 의존 관계를 분리해서 생각해야함

    1. 정적인 클래스 의존 관계: 클래스가 사용하는 import코드로 의존 관계 쉽게 판단 가능
      • 애플리케이션을 실행하지 않아도 분석할 수 있음
    2. 동적 객체 인스턴스 의존 관계: 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조과 연결된 의존 관계
      • 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해 클라이언트와 서버의 실제 의존 관계가 연결되는 것
      • 객체 인스턴스를 생성하고 그 참조값을 전달해 연결된다.
      • 의존관계 주입 사용 시 클라이언트 코드를 변경하지 않고 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다.

3. 컨테이너

  • AppConfig처럼 객체를 생성하고 관리하며 의존관계를 연결해 주는 것을 IoC컨테이너 또는 DI 컨테이너라 함
  • 의존관계 주입에 초점을 맞춰 최근에는 DI 컨테이너라고 함

4. 스프링 컨테이너

  • ApplicationContext를 스프링 컨테이너라 함
  • 기존에는 개발자가 AppConfig를 사용해 직접 객체를 생성하고 DI를 했지만 원래 이건 스프링 컨테이너가 하는 일
  • 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용함
  • 이때 @Bean이라 적힌 메서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록. 이렇게 등록한 객체를 스프링 빈이라고 한다.
  • 스프링 빈은 @Bean이 붙은 메서드 명을 스프링 빈의 이름으로 사용한다.
  • 원래는 개발자가 필요한 객체를 AppConfig를 사용해 직접 조회.
    → 이제는 스프링 컨테이너를 통해 필요한 스프링 빈을 찾음.
    applicationContext.getBean() 메서드 사용
[출처]

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus