Jin's Dev Story

[SpringBoot] IoC &DI 본문

Web & Android/SpringBoot

[SpringBoot] IoC &DI

woojin._. 2023. 8. 12. 13:33

Object ⇒ 실체화가 가능한 것

Instance ⇒ 실체화 된 것

ex) 가구(추상적) ⇒ 의자, 침대 (Object) ⇒ 세상에 생겼을 때 Instance 가 되는 것

IoC 컨테이너

  • 스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너

→ IoC를 실제로 구현하는 것

 

Bean

→ 스프링 컨테이너가 관리하는 객체

 

빈 팩토리(BeanFactory)

→ 빈들을 관리한다는 의미의 컨테이너

→ 객체의 생성과 객체의 사이의 런타임 관계를 DI 관점에서 볼 때의 컨테이너

 

ApplicationContext

→ BeanFactory에 여러가지 컨테이너 기능을 추가한 것

→ BeanFactory를 확장한 것

→ 스프링의 각종 부가 기능을 추가로 제공

 

1) 제어의 역전(Inversion of Control, IoC)

  • 프로그램의 제어 흐름 구조가 바뀌는 것
  • 일반적인 프로그램 흐름 구조 : 사용하는 쪽(개발자)에서 메서드(라이브러리) 호출
  • 역전된 프로그램 흐름 구조 : 기반이 되는 쪽(프레임워크)에서 사용하는 쪽의 메서드 호출
  • 즉, 어떠한 일을 하도록 프레임워크에 제어의 권한을 넘김으로써 개발자가 신경써야 할 것을 줄이는 전략
  • 프레임워크에 정의된 인터페이스, 추상타입을 개발자가 구현함으로써 객체를 프레임워크에 주입함(Dependency Injection, DI)

 

2) DI(Dependency Injection)

  • 의존성 주입
  • 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

DI가 적용 안된 예 (개발자가 직업 인스턴스를 생성)

  class 엔진 {

  }

  class 자동차 {
       엔진 v5 = new 엔진();
  }

Spring에서 DI가 적용 된 예 (컨테이너가 v5 변수에 인스턴스를 할당해줌)

@Component
class 엔진 {

}

@Component
class 자동차 {
     @Autowired
     엔진 v5;
}