Server Programming/SpringBoot

Bean, DI, IoC 의 설명

Dev.BeryL 2022. 1. 25. 18:42
728x90

Bean

  • Spring IoC 컨테이너가 관리하는 자바 객체를 뜻한다.
  • Spring Container에 의해 자바 객체가 만들어지게 되면 이 객체를 Spring은 Spring Bean이라 칭한다.
  • 애플리케이션의 핵심을 이루는 객체들은 Beans라고 부른다.
  • Bean은 스프링 Ioc 컨테이너에 의해서 인스턴스화되어 조립되거나 관리되는 객체다.

빈에 관한 설명이 이해가 안될 수 있다.

한줄로 요약 하자면 그냥 자바 객체라고 생각할 수도 있다.

하지만 더 쉽게 예를들어 설명하자면 다음과 같다.

간단하게 선풍기를 만든다고 예를들면 선풍기를 1대만 만드는게 아니라 100대를 만들어야 한다.

그러면 누군가는 프로펠러를 100개 만들고, 누군가는 프레임을 100개 만들고, 누군가는 모터를 100개를 만들어야한다.

그리고 누군가가 해당 부품들을 받아서 조립을 진행한다.

이때 여기서 프로펠러, 프레임, 모터 이게 다 Bean이라고 할 수 있습니다.

 

DI

  • Dependency Injection 의존성 주입이라고 직역한다.
  • 프로그래밍에서 구성요소간 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해정의되게 하는 디자인 패턴 중의 하나
  • Spring은 DI라는 방식을 이용해 모듈간의 결합도를 낮추어준다.
  • IoC Container가 개발자 대신 xml파일에 정의된 대로 의존성을 대신 주입하는 것
  • DI를 통해 개발자가 해야하는일 : Bean Class 작성, 주입을 위한 설정( xml 파일 작성, @ )

DI에 관해 예를 들어 설명하면 보통 프로젝트를 만들면, 여러개의 객체를 이용해서 만들게 됩니다.

예시로 Main, Execute, MyExecute라는 객체가 있다고 가정하고, Main 객체가 Execute, MyExecute 객체를 이용할 때, Main 객체는 Execute, MyExecute객체에 의존한다고 합니다.

그러면 Main 함수에서 Execute, MyExecute 객체들을 가지고 올 때, 어떻게 하냐면

Execute execute = new Execute();

MyExecute myExecute = new MyExecute(); 로 new라는 키워드를 통해 작성합니다. 이게 틀린게 아니지만

스프링에서는 setter() 함수와 constructor() 생성자 함수를 이용해서 외부의 객체들을 가지고 옵니다. 이런 방법을 의존성 주입(DI) 라고 합니다.

 

IoC Container(Spring Container) 

  • 사용자가 작성한 메타데이터(xml 파일, @)에 따라 Bean Class를 생성 및 관리하는 Spring의 컴포넌트

 

Spring에서 bean을 주입하는 법 - (1)

BookService Class에 생성자로 BookRepository를 전달받고 인스턴스 변수에 할당하는코드

bean 주입을 위해

XML 파일에 bean을 설정

 

Spring에서 bean을 주입하는 법 - (2)

XML 파일을 대체 할 수 있는 JavaClass에 Bean설정을 따로 만들어주어 주입가능

 

출처 : 인프런  백기선 스프링 강의 

반응형