본문 바로가기
Spring/Spring Core

[Section 1] IoC 컨테이너 1부: 스프링 IoC 컨테이너와 빈

by kevinntech 2020. 9. 1.

해당 게시물은 백기선님의 스프링 프레임워크 핵심 기술 강좌를 정리한 내용 입니다.

 

역제어 (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]  

 

댓글