일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MSA
- Heap
- OS
- design pattern
- Galera Cluster
- c언어
- 알고리즘
- JavaScript
- redis
- 네트워크
- mongoDB
- 자료구조
- 컴퓨터구조
- 디자인 패턴
- Data Structure
- Kafka
- C
- spring webflux
- Java
- Algorithm
- 운영체제
- IT
- react
- Spring
- Proxy
- 파이썬
- 백준
- MySQL
- 자바
- JPA
Archives
- Today
- Total
시냅스
IOC와 DI, 컨테이너 본문
제어의 역전 IoC (Inversion of Control)
- 구현 객체는 자신의 로직을 실행하는 역할만 담당한다.
- 프로그램의 흐름은 컨테이너가 관리한다.
- 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라 한다.
@Configuration
public class AppConfig {
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
}
- OrderServiceimpl 은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다.
- AppConfig가 모든 제어를 가지고 있고, OrderServiceImpl 또한 AppConfig가 생성한다.
- OrderServieImpl 은 자신의 로직을 수행할 뿐이다.
의존관계 주입 DI (Dependency Injection)
- OrderServiceImpl 은 DiscountPolicy 인터페이스에 의존하고 실제 어떤 구현 객체가 사용될지는 모른다.
- 의존관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계 둘을 분리해서 생각해야 한다.
- 정적인 클래스 의존관계
- OrderServiceImpl은 MemberRepository, DiscountPolicy에 의존한다.
- 의존관게 만으로는 어떤 객체가 OrderServiceImpl 에 주입 될지 알 수 없다.
- 동적인 객체 인스턴스 의존 관계
- 실행 시점(런타임) 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결 되는 것을 의존관계 주입이라 한다.
- 객체 인스턴스를 생성하고, 그 참조값을 전달해서 연결된다.
- 정적인 클래스 의존관계
IoC 컨테이너, DI 컨테이너
- AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을
- IoC 컨테이너 또는 DI 컨테이너라 한다.
- 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라 한다.
'Java, Spring' 카테고리의 다른 글
Componentscan 과 Autowired (0) | 2022.07.25 |
---|---|
Spring 컨테이너와 Spring Bean (0) | 2022.07.25 |
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2022.07.15 |
[Java] 객체지향(OOP) 관련 용어 정리 (0) | 2022.07.15 |
[Java] Generic - 와일드 카드 Wildcard (0) | 2022.07.11 |
Comments