해당 게시물은 백기선님의 스프링 프레임워크 핵심 기술 강좌를 정리한 내용 입니다.
역제어 (IoC : Inversion of Control)
- 역제어(IoC)는 의존성 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게
아니라, 주입 받아 사용하는 방법을 말한다.
- 의존 객체를 직접 만들어 사용하는 예시
BookRepository bookRepository = new BookRepository();
BookService service = new BookService(bookRepository);
- IoC의 예시
@Autowired
BookRepository bookRepository;
BookService service = new BookService(bookRepository);
BookService 타입의 객체가 사용할 bookRepository라는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말함
빈(Bean)
- 빈(Bean)은 스프링 IoC 컨테이너가 관리 하는 객체이다. 
                                                                   (담고 있는) 
- 스프링에서 빈을 등록하여 사용할 때 장점은 다음과 같다.
  ① 의존성 관리 
  
        의존성 주입을 받으려면 빈이 되어야 합니다. 
  ② 객체의 스코프 관리가 용이 
        스프링 IoC 컨테이너에 등록되는 빈은 기본적으로 싱글톤 scope 으로 등록 됩니다.  
        (메모리 측면에서 효율적이며 런타임 시 성능 최적화에 유리함.) 
  ③ 라이프 사이클 인터페이스를 제공한다. 
@PostConstruct
public void postConstruct(){
System.out.println("================");
System.out.println("Hello");
}
스프링 IoC 컨테이너
- 스프링 IoC 컨테이너는 빈 설정 파일로부터 빈 정의를 읽어 들이고 빈을 생성한 다음, 제공하는 역할을 한다.
- Annotation을 사용하여 POJO 객체를 Bean으로 등록하고 Bean으로 등록된 객체를 주입 받아서 사용한다.
스프링 IoC 컨테이너 관련 인터페이스
1) BeanFactory
- BeanFactory는 스프링 IoC 컨테이너의 최상위에 있는 인터페이스이다.
 
     - IoC 컨테이너 기능 (빈을 생성하고 의존성을 관리) 을 수행한다.
2) ApplicationContext
    - ApplicationContext는 BeanFactory를 상속 받은 인터페이스이다.
    - ApplicationContext는 BeanFactory의 IoC 컨테이너 기능을 가지고 있으면서도 다음과 같은 추가적인 기능을 가진다. 
      ① 메시지 소스 처리 기능 (i18n)        MessageSource
      ② 이벤트 발행 기능                              ApplicationEventPublisher
      ③ 리소스 로딩 기능                              ResourceLoader
      ④ 프로파일과 프로퍼티                       EnvironmentCapable
                   
- ApplicationContext 인터페이스를 구현한 대표적인 클래스
      ① ClassPathXmlApplicationContext            [XML]  
      ② AnnotationConfigApplicationContext    [Java]  
'Spring > Spring Core' 카테고리의 다른 글
| [Section 1] IoC 컨테이너 5부: 빈의 스코프(Scope) (0) | 2020.09.03 | 
|---|---|
| [Section 1] IoC 컨테이너 4부: @Component와 컴포넌트 스캔 (0) | 2020.09.03 | 
| [Section 1] IoC 컨테이너 3부: @Autowired (0) | 2020.09.03 | 
| [Section 1] IoC 컨테이너 2부: ApplicationContext와 다양한 빈 설정 방법 (0) | 2020.09.02 | 
| [Section 0] 스프링 소개 (0) | 2020.09.01 | 
 
										
									 
										
									 
										
									 
										
									
댓글