이전에 우리는 메서드를 생성할때 객체를 생성하고 싶으면 연산자 new를 사용해 메서드 안에다 생성자를 주입했다.
이러한 형태를 강한 결합이라고 한다. 또 의존성이 생긴다고 보았다.
(객체를 수정할때 메서드도 수정해야하기 때문에.)
이러한 단점을 보완하기 위해 스프링은 생성자를 주입받는 개념을 도입했다.
이것을 Inversion of Control(제어의 역전) 이라고 한다.
외부에서 생성된 객체를 인터페이스를 통해 넘겨받는 것이다. 이렇게 하면 결합이 느슨해진다.
그리고 런타임시에 의존관계가 결정되기때문에 유연한 구조를 가진다.
DI(Dependency Injection) 의존성 주입
웹 어플리케이션에서 구성 요소간의 종속성을 외부의 설정 파일 등을 통해 주입하도록 하는 설계.
IoC컨테이너는 어떤 클래스가 필요로 하는 인스턴스를 자동으로 생성/취득하여 연결시켜주는 역할을 한다.
(IoC 컨테이너가 인스턴스를 자동 생성하게 하려면 설정파일에서 해당 클래스 정보와 설정 메타정보를 설정해야한다.)
의존성 관리 방법
스프링은 IoC(제어의 역행)을 두 가지 형태로 지원한다.
Dependency Lookup(컨테이너가 필요한 객체를 생성, 클라이언트가 생성된 객체를 검색해서 사용하는 방식)
Dependency Injection(객체 사이의 의존관계를 스프링 설정 파일에 등록된 정보를 토대로 컨테이너가 자동으로 처리해 주는 방식)
(보통 Dependency Injection를 많이 이용한다.)
스프링 IoC 컨테이너
BeanFactory, ApplicationContext
빈 설정 소스로부터 빈 정의를 읽어들이고, 빈을 구성하고 제공.
빈들의 의존관계를 설정.(객체 생성 책임진다.)
Dependency Injection 종류
세터 인젝션(Setter Injection): Setter메서드로 클래스 사이 의존관계 설정. XML설정파일에서 <bean>의 하위 요소로 <property>사용.
생성자 인젝션(Construcotr Injection): 생성자를 통해 의존 관계를 성정. XML설정 파일에서 <bean>의 하위요소로 <constructure-arg>사용.
'Spring' 카테고리의 다른 글
[Spring]SqlSessionFactory 연동순서 (0) | 2021.11.13 |
---|---|
[Spring]웹사이트 만드는 예제에서 interface 궁금한점 (0) | 2021.11.12 |
web.xml에서 welcome-file-list 란? (0) | 2021.11.10 |
[Spring] Mybatis 예제 순서 (0) | 2021.11.10 |
[SPRING] 컨테이너 기본 개념 (0) | 2021.11.04 |