스프링 사용에 앞서, 알아야할만한 내용을 정리합니다.

IoC (Inversion of Control)

스프링을 공부할 때 반드시 나오는 개념입니다. 번역하면 제어역전이란 뜻이죠.

제어역전이란 프로그램의 제어 흐름 구조가 뒤바뀌는것을 의미해요.

전통적인 프로그램은 main()함수로부터 사용할 오브젝트를 결정하고, 오브젝트를 생성하고 메소드를 호출하고... 이런 프로세스로 동작하게 됩니다.

즉, main() ⇒ Object생성 ⇒ method호출 ⇒ 로직 실행 ⇒ output생성 ...

이렇게 되죠.

제어의 역전이란 이런 제어 흐름의 개념을 뒤집은거라 이해하시면 됩니다. Object를 Main문에서 생성하지 않으며 어떻게 만들어지고 어디서 사용하는지 main문은 관여하지 않죠.

스프링 프레임워크는 Application Context라고 하는 IoC컨테이너를 통해 제어역전을 관리합니다. 컨테이너는 특정 객체의 생성과 관리를 담당하고 객체 운용에 필요로하는 다양한 기능을 제공하죠.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/07df9be8-d561-437e-8b70-dae6c80a46de/Untitled.png

그렇다면 제어역전은 어떻게 구현할까요?

스프링 프레임워크는 제어역전을 DI라는 의존성 주입 방법을 통해 구현합니다.

DI (Dependency Injection)

DI는 Dependency Injection으로 의존관계 주입이라는 뜻입니다. 스프링IoC기능의 대표적인 동작원리인데, 오브젝트 레퍼런스를 외부로부터 제공받고 이를 통해 오브젝트간의 의존관계를 형성해주는 것이죠.

이해하기 앞서 먼저 기존 Java에서 클래스간 의존성을 주입하는 방법에 대해 알아봅시다.

Service service = new Service();
service.doSomething();