[Spring] 스프링 빈, 컨테이너 (IoC)

hamsang·2022년 7월 26일
0

Spring

목록 보기
10/12
post-thumbnail

🌱 스프링 빈 (Spring Bean) 이란?

스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체를 의미한다.


🌱 스프링 컨테이너

스프링 컨테이너는 빈의 생성부터 소멸까지 개발자 대신 관리해주는 공간을 말합니다.

  • 빈의 생명주기를 관리
  • 생성된 스프링 빈들에게 추가적인 기능을 제공

IoC와 DI의 원리가 스프링 컨테이너에 적용된다.


🌱 IoC (제어의 역전)

Inversion of Controll

말 그대로 개발자에게서 컨테이로 제어권이 역전 되었다는 뜻이다. 원래는 프로그래밍을 하는 개발자들이 직접 의존관계를 제어했다. 하지만 객체의 생성부터 생명주기의 관리까지 객체에 대한 제어권이 컨테이너로 넘어가게 됐다.

🌱 DI (의존성 주입)

IoC와 떼놓을 수 없는 DI는, IoC 프로그래밍 모델을 구현하는 방식 중 하나입니다. Spring에서는 DI라는 방식을 통해 IoC를, 즉 의존성 역전 제어를 하고 있다.

이곳에서 DI 자세하게 알아보기!


🌱 스프링 컨테이너 두 종류

1. 빈 팩토리 BeanFactory

  • 빈을 등록, 생성, 조회, 반환 등 빈을 관리하는 기능을 담당한다.
  • 빈의 정의는 즉시 로딩하지만, 실질적으로 빈을 필요로 하기 전까지는 인스턴스화 하지 않는다.
  • getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작한다. (빈의 일생이 시작됨!)

2. 어플리케이션 컨텍스트 ApllicationContext

  • 빈 팩토리를 상속해서 조금 더 확장 & 향상된 컨테이너
  • 빈 팩토리의 기능 + 스프링이 제공하는 각종 부가 서비스

🌱 빈 팩토리와 애플리케이션 컨텍스트와의 차이점

  • 빈 팩토리

    • 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성한다. (lazy loading)
  • 애플리케이션 컨텍스트

    • 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한다.
    • 따라서 애플리케이션 기동 후에는 빈을 지연 없이 얻을 수 있음. (미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장)
profile
햄생

0개의 댓글