IoC & Container

1c2·2024년 4월 15일
0

Spring Framework

목록 보기
2/5

IOC

  • IOC/DI
  • 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정
  • 객체 간의 관계가 느슨하게 연결됨
  • IoC의 구현 방법 중 하나가 DI

IOC 유형

  • Dependency Lookup
    • 컨테이너가 lookup context를 통해서 필요한 Resource나 Object를 얻는 방식
    • JNDI 이외의 방법을 사용한다면 JNDI관련 코드를 오브젝트 내에서 일일이 변경해 주어야 함.
    • Lookup한 Object를 필요한 타입으로 Casting 해 주어야 함
    • Naming Exception을 처리하기 위한 로직이 필요.
  • Dependency Injection
    • Object에 lookup 코드를 사용하지 않고 컨테이너가 직접 의존 구조를 Object에 설정할 수 있도록 지정해주는 방식
    • Object가 컨테이너의 존재 여부를 알 필요가 없음
    • Lookup 관련된 코드들이 Object 내에서 사라짐
    • Setter Injection과 Construction Inject

Container

  • IOC Container
    • 오브젝트의 생성과 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당
    • 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있어 IoC라고 부름
    • 이런 이유로, 스프링 컨테이너를 IoC 컨테이너라고 부르기도 함.
    • 스프링에서 IoC를 담당하는 컨테이너에는 BeanFactory, ApplicationContext가 있음
  • Spring DI Container
    • Spring DI Container가 관리하는 객체를 빈(Bean)이라 하고, 이 빈들이 생명 주기(Life-Cycle)를 관리하는 의미로 빈팩토리(BeanFactory)라 한다.
    • Bean Factory에 여러 가지 컨테이너 기능을 추가하여 ApplicationContext라 한다.

IOC 개념

  • 객체 제어 방식
    • 기존 : 필요한 위치에서 개발자가 필요한 객체 생성 로직 구현
    • IOC : 객체 생성을 Container에게 위임하여 처리
  • IOC 사용에 따른 장점
    • 객체 간의 결합도를 떨어뜨릴 수 있음
  • 객체간 결합도가 높으면?
    • 해당 클래스가 유지보수 될 때 그 클래스와 결합된 다른 클래스도 같이 유지보수 되어야 할 가능성이 높음
    • 객체 간의 강한 결합을 Factory를 통해 결합도를 낮춤
      • 팩토리 호출 방식
      • 팩토리 방식은 팩토리가 구현 클래스를 생성하므로 클래스는 팩토리를 호출
      • 인터페이스 변경 시 팩토리만 수정하면 됨. 호출 클래스에는 영향을 미치지 않음
      • 하지만 클래스에 팩토리를 호출하는 소스가 들어가야 함. 그것 자체가 팩토리에 의존함을 의미함
    • 객체 간의 강한 결합을 Factory를 통해 결합도를 낮춤
      • 각 Service를 생성하여 반환하는 Factory 사용
      • Service를 이용하는 쪽에서는 Interface만 알고 있으면 어떤 구현체가 어떻게 생성되었는지에 대해서는 알 필요 없음
      • 이 Factory 패턴이 적용된 것이 Container의 기능이며 이 Container의 기능을 제공해 주고자 하는 것이
    • 객체 간의 강한 결합을 Assembler를 통해 결합도를 낮춤
      • IoC 호출 방식
      • 팩토리 패턴의 장점을 더하여 어떠한 것에도 의존하지 않는 형태가 됨
      • 실행시점(Runtime)에 클래스 간의 관계가 형성이 됨

Spring DI 용어 정리

  • 빈(Bean)

    • 스프링이 IoC 방식으로 관리하는 오브젝트
    • 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 Bean이라고 부름
    • POJO로 정의
  • 빈팩토리(BeanFactory)

    • 스프링이 IoC를 담당하는 핵심 컨테이너
    • Bean을 등록, 생성, 조회, 반환하는 기능을 담당
    • 일반적으로 BeanFactory를 바로 사용하지 않고 이를 확장한 ApplicationContext를 이용
  • 애플리케이션 컨텍스트 (ApplicationContext)

    • BeanFactory를 확장한 IoC 컨테이너이다.
    • Bean을 등록하고 관리하는 기본적인 기능은 BeabFactory와 동일하다.
    • 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.
    • BeanFactory라고 부를 때는 주로 빈의 생성과 제어의 관점에서 이야기하는 것이고, 애플리케이션 컨텍스트라고 할 때는 스프링이 제공하는 애플리케이션 지원 기능을 모두 포함해서 이야기하는 것이라고 보면 된다.
  • 설정정보/설정 매타정보(configuration metadata)

    • 스프링의 설정정보랑 ApplicatonContext또는 BeanFactory가 IOC를 적용하기 위해 사용하는 메타정보를 말한다. 리는 구성정보 내지는 형상정보라는 의미이다.
    • 설정정보는 IoC 컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 사용됨.
  • Spring 프레임워크

    • 스프링 프레임워크는 IoC 컨테이너, ApplicationContext를 포함해서 스프링이 제공하는 모든 기능을 통틀어서 말할 때 주로 사용한다.

    Spring Container

0개의 댓글