728x90
IoC와 DI
Container
인스턴스의 생명 주기를 관리
- 예시
- bean container : 빈 객체의 생성 ~ 소멸까지 생명 주기 관리
- jsp container : jsp 객체의 생성 ~ 소멸까지 생명 주기 관리
- sevlet container : servlet 객체의 생성 ~ 소멸까지 생명 주기 관리
IoC(Inversion of Control)
제어의 역전으로, 프로그램의 흐름을 개발자가 아닌 프로그램이 제어하는 것
- 제어 : IoC Container가 직접 객체를 생성하여 코드를 제어한다.
- 객체의 생명 주기나 메서드의 호출을 직접 제어(=관리) 한다.
- 역전 : 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리한다.
- IoC가 그럼 왜 필요할까?
- 개발자가 직접 객체를 생성하고, 관계 및 의존성을 직접 제어 → 코드 수정이 많다
- 역할과 관심을 분리하여 응집도를 높이고, 결합도를 낮추어 이에 따라 변경에 유리한 코드를
작성할 수 있도록 하기 위해!
⇒ 할리우드 법칙 (Don`t call us, We`ll call you)
- 우리가 호출하는 것이 아닌 호출 당하기를 기다린다.
- IoC를 구현하는 방법에는 다양한 방법이 있지만 대표적으로 DI가 있다.
DI(Dependency Injection)
의존성의 주입으로, 클래스 사이의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것, 즉 외부에서 객체를 생성하고 주입하는 방식
- 의존성
- 한 클래스가 바뀔 때 다른 클래스가 영향을 받는다. → 의존 관계
public class MemberController{ private MemberService memberService; public MemberController(){ // memberService() 객체가 변할 시 MemberController도 변한다! this.memberService = new memberService(); } }
- 주입
- 의존성을 외부에서 주입해 준다.
< DI에서 자주 사용되는 용어 >
- 의존 객체(Dependency)
- 객체 간의 관계 중 하나
- MemberController 객체가 MemberService객체를 사용하는 경우,
MemberController 객체가 MemberService객체에 의존하고 있다.
- 의존 주입(Dependency Injection)
- 객체 간의 의존 관계를 설정하는 방법
- 외부에서 의존 객체를 생성자, setter, field 등을 통해 주입하는 방법
- 인잭션(Injection)
- 생성된 Bean에 필요한 의존 객체를 주입한다.
- Bean
- 스프링에서 DI를 사용하기 위해 생성되는 객체
- BeanFactory
- Spring에서 Bean을 생성하고 관리하는 Container
- ApplicationContext
- BeanFactory를 상속한 Spring Container
- 다양한 기능을 제공
- @Component
- Spring에서 Bean을 생성하기 위한 애노테이션 중 하나
- 해당 클래스를 Bean으로 등록
- @Qualifier
- 같은 타입의 Bean이 여러 개 있을 경우, 어떤 Bean을 사용할지 결정하는 용도로 사용
- @Autowired
- 자동으로 Bean을 주입하는 기능
728x90
'Spring > Spring의 IoC' 카테고리의 다른 글
Bean의 의존성 주입 (0) | 2024.06.16 |
---|---|
Bean (0) | 2024.06.15 |