Spring은 모든 기능의 기반을 제어의 역전 IoC와 의존성 주입DI에 두고 있다.

🎶 < IoC란 ? >

 

IoC는 Inversion of Control을 줄인 표현이다. 직역하자면, 제어의 역전이다.

 

다음을 보면 Class B object를 사용하기 위해 Class A에서 Object를 직접 생성한다.

public class A {
b = new B();  //Class A에서 new keyword로 class B의 object 생성 
}

제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라, 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다. 위 예제에 제어의 역전을 적용하면 다음과 같이 코드의 형태로 바뀐다. 이전과는 다르게 Class B object를 직접 생성하는 것이 아니므로, 어딘가에서 받아와 사용하고 있다고 추측해볼 수 있다. 실제로 스프링은 스프링 컨테이너가 객체를 관리,제공하는 역할을 한다.

 

public class A {
private B b;
}

 

🎶 < DI 란 ? >

앞에서 설명한 것처럼 Spring에서는 Object들을 관리하기 위해 제어의 역전을 사용한다. 그리고 제어의 역전을 구현하기 위해 사용하는 방법이 DI이다. 여기서 DI라는 개념이 등장한다. DI는 Dependency Injection을 줄인 표현이며, 직역하자면 의존성 주입이다.

 

DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다. 조금 어려운 표현이겠지만  코드를 보면 매우 쉽다.

 

다음 코드는 IoC/DI를 기초로 하는 Spring Code이다. 여기서 사용하는 @Autowired라는 Annotation은 Spring Container에

있는 Bean을 주입하는 역할을 하는데, Bean은 Spring Container에서 Managed하는 Object이다. Bean은 바로 다음 글에 설명할 개념이므로 우선 이 정도로만 이해하도록 하자. 이전 코드에서는 개발자가 직접 B Object를 생성했지만,다음 코드는 어딘가에서 B b;라고 선언했을 뿐 직접 객체를 생성하지는 않고 있다. 다시 말해 Object를 주입받고 있다. 

public class A {
// A에서 B를 주입받음
@Autowired
B b;
}

위와 같이 코드를 작성해도 프로그램은 잘 동작한다. 그 이유는 Spring Container라는 곳에서 Object를 주입했기 때문이다.

쉽게 말해 Spring Container가 B Object를 만들어 Class A에게 준 것이다.

 

그림처럼 기존의 Java Code는 Class A에서 B Object를 쓰고 싶은 경우 직접 생성했지만, Spring의 경우 Class A에서 B Object를 쓰고 싶은 경우 Object를 직접 생성하는 것이 아니라 Spring Container에서 Object를 주입받아 사용한다.

 

이 IoC/DI 개념은 Spring의 핵심 개념이라고 할 수 있을 만큼 중요하기에 반드시 이해해야 한다.

 

 

 

출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

 

참고 하면 좋은 자료 : 

https://taeyoungcoding.tistory.com/93

 

IoC(Inversion of Control) 제어의 역전

🤔 < IoC ? > < IoC(Inversion of Control) : 제어의 역전 > -출처: Wikipidia - In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow of control as compared to traditional control flow. In IoC, custom-wri

taeyoungcoding.tistory.com

IoC 및 DIC에 관한 다른 설명 Version은 위의 글이 있으니 같이 참고하면 IoC와 DI의 이해에 도움이 된다.

 

+ Recent posts