본문 바로가기
Spring

Spring - IoC/DI 빈, 컨테이너

by 밍상 2021. 7. 28.

bean이란?

스프링에서 제어권을 가지고 직접 만들어 관계를 부여하는 오브젝트(스프링 컨테이너가 생성하고 관계 설정, 사용을 제어해주는 오브젝트).

쉽게 말해서 '구준표' 역할은 '이민호' 배우가 연기하기로 했어! 라는 것을 뜻하는 오브젝트이다.

 

bean factory

  • 스프링의 IoC를 담당하는 핵심 컨테이너. 스프링 컨테이너의 최상위 인터페이스이다.
  • bean을 등록/생성/조회/반환/관리
  • BeanFactory는 bean factory가 구현하는 interface이다. (getBean() 등의 메소드로 빈에 대한 정보를 얻을 수 있다)

application context

ApplicationContext를 스프링 컨테이너라고 한다.

  • bean factory를 확장한 IoC 컨테이너. 빈 팩토리의 기능을 모두 상속 받아서 제공한다.
  • bean factory에 추가로 spring의 각종 부가 서비스(국가별 언어 설정, 환경 변수, 어플리케이션 이벤트 등등)를 제공한다.
  • ApplicationContext는 application context가 구현해야 하는 interface, BeanFactory를 상속
  • 인터페이스이다.

이때 빈의 이름은 달라야 한다.

빈들은 모두 Object 타입을 루트로 하는 상속 트리에 속해 있다.

-> 따라서 Object 타입으로 조회하면, 모든 스프링 빈을 조회한다.

 

스프링은 BeanDefinition을 사용해서 다양한 설정 형식을 지원한다. 스프링 컨테이너는 BeanDefinition만 알면 자바 코드인지, XML 코드인지 알 필요 없다.

컨테이너(Container)란?

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

예를 들어, Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말합니다.

WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행합니다.

개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet 컨테이너입니다.

Servlet 컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행한 결과를 웹 브라우저에게 전달합니다.

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

IoC(Inversion of Control)이란?

컨테이너가 코드 대신 오브젝트의 제어권을 갖고 있어 IoC(제어의 역전)이라 합니다.

예를 들어, 서블릿 클래스는 개발자가 만들지만, 그 서블릿의 메소드를 알맞게 호출하는 것은 WAS 입니다.

이렇게 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해주는 것을 제어의 역전이라고 합니다.

 

DI(Dependency Injection)이란?

DI는 의존성 주입이란 뜻을 가지고 있으며, 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말합니다.

스프링은 setter 메소드를 이용한 의존성 주입을 권장합니다.

스프링은 생성자 주입 방법을 권장합니다!

 

 

 

출처

https://www.boostcourse.org/web326/lecture/58970/?isDesc=false

 

웹 백엔드

부스트코스 무료 강의

www.boostcourse.org

https://velog.io/@ye050425/spring-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC

 

[spring] 용어 정리

JSP Model1, Model2, Spring MVC pattern 차이 Model 1 뷰와 로직을 모두 JSP 페이지에서 처리하는 구조 구조가 단순해 익히기 쉬움 HTML, CSS, Javascript, Java 코드가 JSP에 섞이므로 분업 쉽지 않고 유지보수가 어렵

velog.io

 

'Spring' 카테고리의 다른 글

Spring - 빈 등록  (0) 2021.09.27
이름이 [~~]인, 둘 이상의 fragment들이 발견되었습니다.  (0) 2021.08.30
Spring 객체 설정  (0) 2021.08.10
Spring MVC  (0) 2021.07.30
Spring 기초  (0) 2021.07.28