[Spring] IoC, DI

dustle·2023년 8월 21일
1

IoC(Inversion Of Controll)

  • 개발자가 직접 오브젝트 생성하고 관리하는 것이 아니라 스프링 프레임워크에서 관리 대상을 생성하고 관계를 맺어 줍니다.
  • ApplicationContext 에서 작동 (스프링컨테이너 / IoC 컨테이너)
  • IoC 컨테이너는 객체를 생성하고, 의존관계를 설정하고 생명주기를 관리합니다.
  • 구현 관계 : BeanFactory ← ApplicationContext ← WebAppliactionContext

IoC 용어 정리

bean : 스프링에서 제어권을 가지고 직접 만들어 관계를 부여하는 오브젝트

  • 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 빈은 아닙니다.
  • 스프링의 빈은 스프링 컨테이너가 생성하고 관계설정, 사용을 제어해주는 오브젝트를 말합니다.

bean factory : 스프링의 IoC를 담당하는 핵심 컨테이너

  • Bean을 등록/생성/조회/반환/관리 한다. 보통 bean factory 를 바로 사용하지 않고 이를 확장한 application context 를 이용합니다.
  • BeanFactory는 bean factory가 구현하는 interface 입니다. (getBean() 등의 메서드가 정의)

application context : bean factory를 확장한 IoC 컨테이너
Bean의 등록/생성/조회/반환/관리 기능은 bean factory와 같지만, 추가적으로 spring의 각종 부가 서비스를 제공 합니다.

  • ApplicationContext 는 application context 가 구현해야 하는 interface이며, BeanFactory를 상속합니다.

configuration metadata : application context 혹은 bean factory가 IoC를 적용하기 위해 사용하는 메타정보

  • 스프링의 설정정보는 컨테이너에 어떤 기능을 세팅하거나 조정하는 경우에도 사용하지만 주로 bean을 생성/구성하는 용도로 사용합니다.

container (ioC container) : IoC 방식으로 bean을 관리한다는 의미에서 bean factory나 application context를 가리킵니다.

  • application context는 그 자체로 ApplicationContext 인터페이스를 구현한 오브젝트를 말하기도 하는데, 하나의 애플리케이션에 보통 여러개의 ApplicationContext 객체가 만들어집니다.
  • 이를 통칭해서 spring container라고 부를 수 있습니다.

DI(Dependency Injection)

  • 의존관계 설정을 런타임 시에 스프링에서 대신 해줍니다.

  • 필드 주입 방식

    • @Autowired
    • SRP 위반
    • 의존성 숨음
    • final 키워드 불가 (불변성 깨짐)
    • 런타임시 주입
  • setter 주입 방식

    • 선택적인 의존성 사용 가능합니다.
    • 런타임시 주입 → 낮은 결합도 순환참조 터져도 확인이 불가능합니다.
    • 주입이 필요한 객체가 주입 되지 않아도 객체 생성이 가능합니다.
  • 생성자 주입 방식

    • 의존성 없이 Instance 생성이 불가능
    • 객체 생성하는 시점에 필요한 빈 주입
    • 애플리케이션 구동 시점에서 순환 참조 오류 찾기 가능

0개의 댓글