본문 바로가기

Spring/개념 정리

[Spring] IoC 컨테이너

컨테이너란?

컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이다.

즉 컨테이너란 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다. 컨테이너는 적절한 설정만 되어있다면 누구의 도움없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤한다.

스프링 컨테이너는 스프링 프레임워크의 핵심부에 위치하여, DI(Dependency Injection)을 이용해 애플리케이션을 구성하는 컴포넌트들을 관리한다.

 

스프링 컨테이너의 종류

빈팩토리 BeanFactory

DI의 기본사항을 제공하는 가장 단순한 컨테이너이고, 빈을 생성하고 분배하는 책임을 지는 클래스이다.

Bean이란? Spring이 생명주기를 관리하는 객체

 

인텔리제이에서는 Bean인 경우 왼쪽에 아이콘으로 표시를 해준다.

 

어플리케이션 컨텍스트 ApplicationContext

빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공한다.

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

가장 많이 사용되는 어플리케이션 구현체는 이렇다.

  • ClassPathXmlApplicationContext : 클래스패스에 위치한 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.
  • FileSystemxmlApplicationContext : 파일 경로로 지정된 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.
  • XmlWebApplicationContext : 웹 어플리케이션에 포함된 xml 파일에서 컨텐스트 정의 내용을 읽어들인다.

 

다음은 ClassPathXmlApplicationContext의 예시이다.

ApplicationContext context = new ClassPathXmlApplicationContext("config/bean.xml");
MyBean bean = context.getBean("myBean");

 

IoC (Inversion of Control) 제어의 역전

제어의 역전이란 제어권이 뒤바뀌었다는 뜻이다. 즉, 외부에서 의존성을 가져오는 경우를 말한다.

밖에서 의존성을 주입해주는것이 DI이고, 따라서 DI는 IoC의 일종이라고 생각하면 된다.

// 필요한 객체를 직접 생성하는 경우 -> 직접적으로 의존성을 만드는 것
public class OwnerController {
	private OwnerRepository ownerRepository = new OwnerRepository();
}

 

// 객체를 직접 생성하지 않고 외부의 객체를 받는 경우 -> 외부에서 의존성을 가져오는 것
public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
		this.owners = clinicService;
		this.visits = visits;
}

 

 

* 출처 - youtube/뉴렉처

 

'Spring > 개념 정리' 카테고리의 다른 글

[Spring] DI (Dependency Indection), 결합도  (0) 2021.10.11