DI, IoC, Bean

임소윤·2022년 8월 22일
0

WIL

목록 보기
3/5

DI(Dependency Injection)

의존성 주입(Dependency Injection)
의존성 주입이란 컨테이너에서 관리할 객체를 지정해주고, 코드내에서 컨테이너에서 생성된 객체를 받아서 사용하는 방식이다. 빈을 정의할때 객체간의 의존 관계를 명시해 코드에서 사용시 자동으로 주입받도록 한다.

  • 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.
  • 즉, 각 객체간의 의존성을 스프링 컨테이너(Spring Container)가 자동으로 연결해주는 것으로, 개발자가 빈(Bean) 설정파일에 의존관계가 필요한 정보를 추가해주면, 스프링 컨테이너가 자동적으로 연결해 준다
  • 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.
  • 의존성 주입은 IoC(Inversion of Control: 제어의 역전)원칙 하에 객체 간의 결합을 약하게 해주고 유지보수가 좋은 코드를 만들어 준다. 또한 의존성 주입은 개발자들이 객체를 생성하는 번거로움과 다양한 케이스를 고려하는 겨우를 줄이고, 변수 사용과 개발에 더욱이 집중할 수있게 해준다.

IoC(Inversion of Control)

제어의 역전 (Inversion of Control)
제어의 역전은 의존성 주입의 상위 개념으로 스프링 컨테이너가 필요에 따라 개발자 대신 Bean들을 관리(제어)해주는 행위이다. 컨테이너는 어플리케이션을 구성하는 Bean들을 관리하기 위해 IOC를 사용한다. 객체에 대한 제어권이 컨테이너로 역전되기 때문에 제어의 역전이라고 한다. IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. 즉, 사용자의 제어권을 다른 주체(Spring)에게 넘기는 것을 IOC(제어의 역전)라고 한다.


Bean

Bean : Spring Ioc 컨테이너에 의해 관리(생명주기(life Cycle)관리)되는 객체
제어의 역전으로 인해 객체에 대한 권한이 스프링에 위임되어서 스프링에 의해 생성되고 관리되는 자바 객체들을 Bean이라고 부른다. Spring Framework 에서는 Spring Bean 을 얻기 위하여 ApplicationContext.getBean() 와 같은 메소드를 사용하여 Spring 에서 직접 자바 객체를 얻어서 사용한다.

<@Bean과 @Component의 차이>

@Bean

  • 외부 라이브러리를 bean으로 등록하고 싶을 때 사용
  • JavaConfig가 @Bean이 붙은 메소드를 만나면 해당 메소드를 실행하고 반환값을 BeanFactory에 Bean으로 등록
  • 기본적으로 bean의 이름과 메소드의 이름은 동일
  • @Bean(initMethodName="메소드이름")으로 Bean 이름 변경 가능

@Component

  • 사용자가 직접 생성한 클래스를 Bean으로 등록할 때 사용
  • 런타임시 @Component를 찾아 Bean으로 등록


참고자료
https://velog.io/@9sanha/%EC%8A%A4%ED%94%84%EB%A7%81-Bean-IOC-DI
https://velog.io/@davidko/IoC-DI-Bean-%EC%9D%B4%EB%9E%80
https://velog.io/@damiano1027/Spring-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-%EC%A0%9C%EC%96%B4%EC%9D%98-%EC%97%AD%EC%A0%84

0개의 댓글