Spring MVC, Sptring boot

[IoC , DI] 개념잡기

고인돌개발자 2021. 5. 8. 21:31

학습목표 : Ioc, DI 개념을 잡는다.

 

DI 의 Autowired 는 객체의 생성자, setter 함수를 통해서 Injection 된다.

 

이 한장의 그림.

 

<Ioc & Di & Singleton>

 

 

Ioc(Inversion of Control)

 - 자바 프로그램을 개발할때 개발자는 필요한 시점에 객체를 생성하고, 필요한 부분에 해당 객체를 주입(Injection) 한다.

해당 객체의 Life Cycle 을 개발자가 프로그램하면서 제어하는 방식이었다.

Spring Ioc 컨테이너는 필요할 할것으로 생성되는 객체들을 싱글톤으로 생성하여 컨테이너에 넣었다가, 

개발자가 필요로 하는 시점에 가져다 사용하기만 하면 된다.

이렇게되면, 해당 객체의 제어는 개발자가 하는것이 아닌 스프링 컨테이너(IoC)가 하게된다.

즉, 제어권이 개발자가 아닌 스프링 프레임웍으로 넘어가게 된다. 이것이 제어의 역전이다.

 

DI (Dependency Injection) 의존성 주입

 위에 생성된 IoC 의 객체들을 개발자는 필요한 부분에서 가져다가 사용하게 된다. 
즉 IoC 에 있는 값들을 빌려서 사용하게 되는 것이다. 

IoC 컨테이너에 의존해서 객체를 가져다가 주입(Injection) 하게 되는 것이다.

Ioc(Inversion of Control)

IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

IoC는 제어의 역전이라고 말하며, 간단히 말해 "제어의 흐름을 바꾼다"라고 한다.

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

기존에는 다음과 순서로 객체가 만들어지고 실행되었다.

  1. 객체 생성
  2. 의존성 객체 생성
    클래스 내부에서 생성
  3. 의존성 객체 메소드 호출

하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.

  1. 객체 생성
  2. 의존성 객체 주입
    스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
  3. 의존성 객체 메소드 호출

스프링이 모든 의존성 객체를 스프링이 실행될때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글턴 패턴의 특징을 가지며,

제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다.