무작정 개발.Vlog

[Spring 2.5] DI, IoC 란?

by 무작정 개발
반응형
2022.03.21(60일 차_월요일)

 

 Spring Framework에서는 DI, IoC, AOP 이 3가지는 핵심 도구이다. 

이번 글에서는 DI (의존성 주입) , IoC(제어의 역전)에 대해 정리할 것이다.

 


▶ DI (Dependency Injection) - 의존성 주입

 

DI (의존성 주입)란 스프링은 객체의 의존성을 의존성 주입을 통해 관리한다.

객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식이다.

DI (의존성 주입)를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

의존성을 제거하는 클래스 구현 방법으로 각 클래스가 인터페이스를 기반으로 호출하게 하고, 의존성 주입을

통해 객체 생성을 추상화하는 방법이 있는데 이 방법이 DI(의존성 주입)이다.

(DI) 의존성 주입 방법에는

생성자 기반 의존성 주입 (Constructor Injection), Setter 기반 의존성 주입 (Setter Injection)이 있다.

 

 

일단 A라는 객체에서 B, C라는 객체를 이용할 때 2가지 방법이 있다.

DI (의존성 주입)
DI (의존성 주입)

 

방법 1은  A객체가 B와 C 객체를 new 생성자를 통해 직접 생성하는 방법이다.

방법 2는  외부에서 생성된 객체를 setter()를 통해 사용하는 방법이다.

 

IOC 컨테이너에서 생성된 객체를 주입
IOC 컨테이너에서 생성된 객체를 주입

두 번째 방법은 A객체에서 B, C 객체를 사용(의존)할 때 A객체에서 직접 생성하는 것이 아니라

외부 (IOC컨테이너)에서 생성된 B, C 객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용하는 방식이다.

 

스프링에서는 객체를 Bean이라 부르고, 프로젝트가 실행될 때 사용자가 Bean으로 관리하는

객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 

스프링에서는 Bean 컨테이너라고 부른다.

 

▶ IoC (Inversion of Control) - 제어의 역전

 

IoC (Inversion of Control) 란 "제어의 역전"이라는 의미로, 말 그대로 메서드나 객체의

호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

쉽게 말하면

객체를 필요할 때 생성해서 사용하는 것이 아니라 미리 생성해 놓고 꺼내어 사용하는 방식

 

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

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여

가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

 

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

객체 생성 -> 의존성 객체 생성(클래스 내부에서 생성) -> 의존성 객체 메서드 호출

 

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

(1) 객체 생성

(2) 의존성 객체 주입

     - 스스로 만드는 것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입

(3) 의존성 객체 메서드 호출

 

스프링(Spring)이 모든 의존성 객체를 스프링이 실행될 때 다 만들어주고 필요한 곳에 주입시킴으로써

Bean들은 싱글턴 패턴의 특징을 가지며,

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

 

 

[참고 사이트]

https://velog.io/@gillog/Spring-DIDependency-Injection

 

[Spring] DI, IoC 정리

DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로,객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.DI(의존성 주입)

velog.io


+ 스프링(Spring)을 배우면서 계속 글을 수정할 예정~

스프링 첫날이라 아직 개념이 많이 부족하여 다른 글을 참고를 많이 했지만 꾸준히 공부를 하며 글을 정리할 예정이다.

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기