개발/SPRING

[Spring] DI(Dependency Injection, 의존성 주입)와 IOC(Inversion Of Control, 제어의 역행)

윤_ve 2021. 5. 24. 15:49

spring에서 가장 중요한 개념인 DI와 IOC에대해 설명해 보겠다.

 

DI(Dependency Injection - 의존성 주입)

 

DI(Dependency Injection)는 의존성 주입의 줄임말로 스프링 프레임워크가 다른 프레임워크와 다른 가장 큰 특징 이라고 할수 있다. 자바라는 언어하면 떠오르는 것은 객체지향이다. 객체 지향이란 각각 사물을 하나의 객체로 인식하고 그것을 사람의 기준에서 판단한다. 그래서 자바 프로그래밍은 객체를 생성해 객체를 통해 서로 다른 클래스를 연관지어 나간다.

 

정보처리기사 시험준비하면서 매 기출, 예제 마다 이런 문장이 있었다.

"모듈간의 결합도는 낮추고 응집도는 높여야 한다."

이게 좋은 프로그래밍을 위한 방법인데 이 모듈간의 결합도를

낮출수 있게 해주는 것이 의존성 주입이다.

결합도를 낮췄기 때문에 조금더 유연한 프로그래밍을 가능하게 해주는 것이다.

 

보통 자바로 프로그래밍을 하면 

new 생성자를 이용해서 객체를 생성해서 객체의 멤버변수들을 끌어와 사용한다.

이렇게 직접적으로 객체를 생성해서 하는 방식의 프로그래밍은 결합도가 낮다고 할 수 없다.

 

스프링 프레임워크에서는 객체를 직접 생성하는 것이 아닌 외부에 IOC컨테이너에서 만든 객체

setter나 constructor(생성자)를 통해 주입시켜서 사용한다. 

이 방법을 의존성 주입이라고 한다.

 

IOC(Inversion Of Control - 제어의 역행)

IOC는 메서드나 객체의 호출을 외부에서 결정하는것을 말한다.

 

쉽게 설명하면, 스프링 프레임워크를 사용하기 전에는 개발자에게 프로그램의 흐름을 제어 할 수 있는 권한이 있었다.

직접 객체를 사용해서 직접 사용하고 직접 사용을 종료시키는 일련의 작업들이 모두 개발자의 손, 개발자가 직접 입력하는 코드에 의해 결정되었다면 스프링 프레임웤에서는 이러한 일련의 과정과 흐름을 프레임워크가 맡아서 하게 된다.

 

@Autowired라는 어노테이션을 사용해 자동으로 bean객체를 주입하는 것과 같은 방법을 제어의역행이라고 한다.

 

객체의 생성부터 소멸까지의 생명주기를 컨테이너에서 도맡아 하게 되는 것이다. 

'개발 > SPRING' 카테고리의 다른 글

[SPRING]requestMethod.get 과 post  (0) 2021.06.22
스프링 예제  (0) 2021.05.21
이클립스에 STS 설치  (0) 2021.05.10