티스토리 뷰
※ 주의 : 학습한 내용을 이해한 대로 기재했기 때문에 잘못된 내용이 있을 수 있습니다. 잘못된 내용이 있을 경우 댓글로 알려주시면 감사하겠습니다.
1. A 클래스 내에서 B, C 인터페이스를 사용하는 경우
1) A 클래스 내부에서 B, C 인터페이스의 구현 클래스를 직접 생성해서 할당한다.
- A 클래스 개발 단계에서 B, C 인터페이스의 구현 클래스가 이미 완성되어 있어야 한다.
- B, C 인터페이스의 구현 클래스에서 수정이 일어나면 A 클래스 내부의 구현 클래스 생성, 할당 부분도 같이 수정해야 한다.
2) A 클래스의 생성자 인수로 B, C 인터페이스의 구현 클래스 객체를 사용한다.
- 1)보다 클래스의 결합도가 낮아진다.
- A 클래스 생성 시 필요한 구현 클래스 객체는 개발자가 직접 생성해서 주입해야 한다.
그래서 B, C 인터페이스의 구현 클래스에서 수정이 일어나더라도 A 클래스 내부에서 수정할 부분은 없어진다.
그러나 B, C 인터페이스의 구현 클래스 주입 부분은 여전히 수정이 필요하다.
2. 의존성 주입
1) 어떤 클래스가 필요로 하는 컴포넌트를 외부에서 생성하고 내부에서 그것을 사용 가능하게 만드는 과정
- 위의 경우 B, C 인터페이스의 구현 클래스들은 A 클래스가 의존하는 컴포넌트가 된다.
- B, C 인터페이스의 구현 클래스를 외부에서 생성한 후 그것을 A 클래스 내부에서 사용할 수 있게 하는 것이 의존성 주입이다.
- 하나의 처리 프로세스에 여러 개의 컴포넌트를 사용하는 경우에 효과적.
2) IoC(Inversion of Control)라고 하는 소프트웨어 디자인 패턴 중의 하나
- 제어 역전 : 컴포넌트를 구성하는 인스턴스의 생성과 의존 관계의 처리를 소스코드가 아닌 DI 컨테이너에서 대신하기 때문에 제어가 역전됐다고 봄.
3) DI 컨테이너 : 의존성 주입을 자동으로 처리하는 기반 (=IoC 컨테이너)
- DI 컨테이너에 B, C 인터페이스와 구현 클래스를 알려주고 의존 관계를 정의해주면 A 클래스가 생성될 때 B, C 인터페이스의 구현 클래스가 자동으로 생성되어 주입된다.
4) 인스턴스 관리
- 인스턴스의 scope 제어
- 인스턴스의 생명 주기 제어
- AOP 방식으로 공통 기능을 집어넣을 수 있음.
- 의존하는 컴포넌트 간의 결합도를 낮춤.
3. Spring Framework에서의 의존성 주입
1) DI 컨테이너 : ApplicationContext
- @Configuration과 @Bean 애너테이션을 사용해서 DI 컨테이너에 컴포넌트를 등록할 수 있다.
2) DI 컨테이너에 등록된 컴포넌트 : Bean(빈)
- 애플리케이션은 ApplicationContext 인스턴스(DI 컨테이너)를 통해 빈을 가져올 수 있다.
- Bean Definition : 빈 정의, 빈에 대한 설정 정보.
- lookup : 룩업, DI 컨테이너에서 빈을 찾아오는 행위
3) 빈 설정 방식
- 자바 기반 설정
- XML 기반 설정
- 애너테이션 기반 설정
4) 의존성 주입 방법
- Setter Injection(세터 인젝션)
: 설정자 기반의 의존성 주입 방식, 설정자 메소드의 인수를 통해 의존성을 주입한다.
- Constructor Injection(컨스트럭션 인젝션)
: 생성자 기반 의존성 주입 방식, 생성자의 인수를 사용해 의존성을 주입한다.
- Field Injection(필드 인젝션)
: 생성자나 설정자 메서드를 쓰지 않고 DI 컨테이너를 통해 의존성을 주입한다.
: 의존성을 주입하고 싶은 필드에 @Autowired 애너테이션을 달아준다.
: 반드시 DI 컨테이너를 사용한다는 것이 전제.
DI 컨테이너 없이 사용되는 독립형 라이브러리로 사용될 소스코드에서는 필드 인젝션을 사용할 수 없다.
5) 오토와이어링 : Autowiring
- 명시적으로 빈을 정의하지 않고도 DI 컨테이너에 빈을 자동으로 주입하는 방식
참조할(아직 보지 못함;;;) 사이트 : https://www.tutorialsteacher.com/ioc/introduction
'Spring' 카테고리의 다른 글
[SpringMVC] property의 변수를 @Value로 사용하기 (0) | 2019.11.06 |
---|