DI는 IoC란 원칙을 구현하기 위해서 사용되는 방법중 하나이다. DI는 의존성 주입이라고 표현이 되며, 의존성은 객체간의 의존성을 나타낸다.
밑의 예제를 통해 의존성 관계를 알아보면,
MemberService 라는 객체에서 MemberRepository 라는 객체에 의존성을 가지고 있다. 참조하고 있다라고 이해하면 편하다.
위 코드는 일반적인 자바에서의 생성자를 통한 의존관계 주입이고, 객체간의 결합도가 느슨하지 못해 객체간의 결합도가 상당히 높다.
객체간의 결합도가 높게되면, 예를 들어 MemberRepository 라는 객체를 다른 MockRepository라는 객체로 교체해야 하는 경우, 직접 코드를 변경해야 하는 상황이 발생하게 된다.
즉, 유지보수에 용이하지 못하게 된다.
POJO 스프링에서는 이 문제를 해결한 다양한 DI 방법을 제공한다.
등이 존재한다.
이 게시물에서는 스프링 컨테이너와 Component에 대해 소개하려고 한다.
스프링 컨테이너에 대해 알아보기 전에 스프링 컨테이너의 구성요소인 빈에 대해 먼저 알아보자
스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트이다.
스프링 컨테이너는 ApplicationContext라고 하고, 인터페이스로 구현되어 있다.
위 그림처럼 스프링 컨테이너는 객체들을 담고 있는 모습으로 나타나져 있다. 그림에서 유추해볼 수 있는 것 처럼 컨테이너들은 객체들간의 의존성 주입을 관리해주는 역할을 한다. 즉, 서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할을 한다.
즉 컨테이너의 의미는 다음과 같이 해석된다.
스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원할 수 있다.
<bean>
당 각 1개씩 메타 정보가 생성설정 방식은 XML,java기반의 애너테이션 기반 이 두가지가 존재한다.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
(1) 스프링 컨테이너 생성
(2) 스프링 빈 등록
(3) 스프링 빈 의존관계 설정 - 준비
(4) 스프링 빈 의존관계 설정 - 완료