본문 바로가기

Framework/Spring

Spring IoC(Inversion of Control) / Spring DI(Dependency Injection)

  • IoC(제어반전)란?
    - IoC란, Inversion of Control의 약자로 프로그램을 구동하는데 필요한 객체에 대한 생성/변경 등의
      관리를 프로그램을 개발하는 사람이 아닌, 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말함.
    - 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행함.

  • IoC 컨테이너
    - 스프링에서 관리하는 객체를 "Bean(빈)"이라고 하고, 해당 빈을 관리한다는 의미로
      컨테이너를 "Bean Factory"라고 함.

  • IoC 컨테이너의 역할
    1) 객체의 생명주기와 의존성을 관리
    2) VO(DTO / POJO) 객체의 생성 / 초기화 / 소멸 등의 처리를 담당함.
    3) 개발자가 직접 객체를 생성할 수 있지만, 해당 권한을 컨테이너에게 맡김으로써
        소스코드의 구현 시간을 단축할 수 있음.

  • IoC 컨테이너와 Bean 객체
Bean
- 스프링이 IoC 방식으로 관리하는 Class
- 스프링이 직접 생성과 제어를 담당하는 객체
Bean Factory
빈 팩토리
- 스프링의 IoC를 담당하는 핵심 컨테이너
- Bean을 등록, 생성, 조회, 반환하는 기능을 담당
ApplicationContext
애플리케이션 컨텍스트
- BeanFactory를 확장한 IoC 컨테이너
- Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만,
  스프링이 제공하는 각종 부가 서비스를 추가 제공함

-------------------------------------------------------------------------------------------------------------------------------------------------

  • DI(의존성 주입)란?
    - DI란, Dependency Injection의 약자로 IoC 구현의 핵심 기술이라고 할 수 있음.
    - 사용하는 객체를 직접 생성하여 만드는 것이 아니라, 컨테이너가 Bean의 설정 정보를 읽어와 자동으로 해당 객체에 연결하는 것을 의미함
    - 의존성을 주입 받게 되면 이후 해당 객체를 수정해야할 상황이 발생했을 때, 소스코드의 수정을 최소화 할 수 있음

  • DI의 장점
    1) 개발자가 작성할 코드가 단순해짐
    2) 객체 사이의 종속 관계(결합도)를 해소할 수 있음
    ※ 객체 사이의 종속 관계(결합도) : 한 클래스에서 필드 객체를 생성할 때 발생하는 두 객체 간의 관계를 말하며,
        객체 간 내용이 수정될 경우 영향을 미치는 정도를 나타냄

  • DI 종류
    - Setter 메소드를 통한 의존성 주입
    : 의존성을 주입 받는 Setter 메소드를 만들고 이를 통해 의존성 주입
    : <property> 태그를 사용함

    - 생성자를 통한 의존성 주입
    : 필요한 의존성을 포함하는 클래스에 생성자를 만들고 이를 통해 의존성 주입
    : <constructor-arg> 태그를 사용함

    - 메소드를 통한 의존성 주입 : 의존성을 입력 받는 일반 메소드를 만들고 이를 통해 의존성 주입

'Framework > Spring' 카테고리의 다른 글

Mybatis  (0) 2025.02.06
Spring DI - Annotation  (0) 2025.02.06
Spring Framework  (0) 2025.02.03
Framework 기본 개념  (0) 2025.02.03