IoC?

객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐다는 뜻

개발자 >> Spring 으로 역전

 

컴포넌트 의존관계 설정, 설정, 생명주기를 해결하기 위한 디자인 패턴

 

 

IoC Container

Spring에서 객체의 생성과 관리, 의존성의 관리를 수행하는 컨테이너

 

인스턴스 생성부터 소멸까지 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신해줌

객체관리 주체가 개발자가 아닌 컨테이너가 되기 때문에(역전) 개발자는 로직에 집중 가능

  • 객체의 생성을 책임지고 의존성을 관리
  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한 보유
  • 개발자들이 직접 POJO(Plain Old Java Object)를 생성할 수도 있음
  • 개발자는 비즈니스 로직에 집중 가능
  • 객체 생성 코드가 없으므로 TDD(테스트 주도 개발) 용이

Spring이 직접 만들고 관계를 부여하는 오브젝트 :: Bean

Bean의 생성과 결정과 같은 IoC 오브젝트 :: Bean Factory

 

 

BeanFactory

컨테이너에서 객체 생성, DI처리하는 기능만 제공

Bean 등록, 생성, 조회, 반환 관리

Bean조회할 수 있는 getBean() 메소드 정의

보통은 BeanFactory 바로 사용하지 않고 이를 확장한 ApplicationContext 사용

 

 

ApplicationContext

Bean을 등록, 생성, 조회, 반환 관리하는 기능

여기에 더해 Spring의 각종 부가기능 추가제공

 

  • 국제화가 지원되는 텍스트 메세지 관리
  • 이미지같은 파일 자원 로드할 수 있는 포괄적인 방법 제공
  • 리스너로 등록된 빈에게 이벤트 발생을 알려줌

출처 : https://dog-developers.tistory.com/12

 

 

public class UserDao {

  private DConnectionMaker dConnectionMaker;

  public UserDao(DConnectionMaker dConnectionMaker) {
    this.dConnectionMaker = dConnectionMaker;
  }
}

IoC 미적용

 

public class UserDao {

  private DConnectionMaker dConnectionMaker;

  public UserDao(DConnectionMaker dConnectionMaker) {
    this.dConnectionMaker = dConnectionMaker;
  }
}

@Configuration
public class DaoConfig {

  @Bean
  public DConnectionMaker dConnectionMaker() {
    return new DConnectionMaker();
  }

  @Bean
  public UserDao userDao() {
    return new UserDao(dConnectionMaker());
  }
}

IoC 적용

@Configuration :: ApplicationContext가 활용하는 IoC설정 정보

ApplicationContext는 DaoConfig 클래스를 설정 정보로 등록, @Bean이 붙은 메소드의 이름을 가져와 Bean 목록 생성

 

 

 

'끄적 > BE' 카테고리의 다른 글

HTTP  (0) 2023.01.09
MVC1 MVC2  (0) 2023.01.05
Dependency Injection (의존성 주입)  (0) 2023.01.03
Persistence Context (영속성 컨텍스트)  (0) 2023.01.01
Spring MVC  (0) 2022.12.29

+ Recent posts