[Spring/Springboot] 제어의 역전 IoC(Inversion of Control)
2024. 12. 15. 23:06ㆍCS/Spring
제어의 역전 IoC(Inversion of Control)
public class AppConfig{
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
//return new FixDiscountPolicy();
//-> 할인 정책을 변경해도, 애플리케이션의 구성 역할을 담당하는 AppConfig만 변경하면 됨
}
}
- 기존 프로그램 : 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성, 연결, 실행 → 구현 객체가 프로그램의 제어 흐름을 스스로 조종
- AppConfig 등장 : 구현 객체는 자신의 로직을 실행하는 역할만 담당 → 프로그램 제어 흐름은 AppConfig에게
- OrderServiceImpl은 필요한 인터페이스들을 호출하지만, 어떤 구현 객체들이 실행될지 모름
- 심지어 OrderServiceImple AppConfig가 생성 → 그리고 AppConfig는 OrderServiceImpl이 아닌 OrderService 인터페이스의 다른 구현 객체를 생성하고 실행할 수도 있지만, OrderServiceImpl은 그런 사실을 모른 채 자신의 로직을 실행할 뿐
- 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것 : IoC
IoC 컨테이너(혹은 DI 컨테이너)
- AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것
'CS > Spring' 카테고리의 다른 글
[Spring/Springboot] AOP 관점 지향 프로그래밍 (0) | 2024.12.15 |
---|---|
[Spring/Springboot] API, 프레임워크, 라이브러리의 차이 (0) | 2024.12.15 |
[Spring/Springboot] Bean/싱글톤 패턴/컴포넌트 스캔 (0) | 2024.12.15 |
[Spring/SpringBoot] 의존 관계 주입 DI(Dependency Injection) (0) | 2024.12.15 |
[Spring/MVC] Controller, Repository, DTO, Domain, Config의 역할 (0) | 2024.08.26 |