스프링

[스프링] IoC(Inversion of Control)와 DI(Dependency Injection)

만듀 2021. 9. 8. 13:26

DI(Dependency Injection)

DI는 의존성 주입을 말한다. java 개발에서 의존성 객체를 생성하는 방법은 다음 두가지로 분류가 된다. 

 

첫번째 방식(기존 java개발 방식)

 

public class A{

private B b;

 

A(){

b=new B();

}

}

 

두번째 방식(spring을 통한 DI)

 

public class A{

private B b;

 

public void setB(B b){

this.b = b;

}

}

 

첫번째 방식은 내부에서 new 연산자를 사용해 다른 클래스를 생성하는 것이고, new연산자를 사용해 만들어진 객체에 의존한다고 할 수 있다. 

 

하지만, 두번째 방식은 내부적으로 의존성 객체를 주입시켜준다. 

 

두번째 방식은 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들을 자동으로 생성해준다.

스프링에서 객체의 생성과 소멸에 관련된 작업을 자동으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다. 

또한, 스프링에서는 프로젝트가 실행될 때 사용자가 bean으로 관리하는 객체에 생성했던 Bean을 주입시켜주는데 이 과정을 DI라고 한다. 

IoC(Inversion of Control)

IOC는 제어의 역전. 매소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정된다는 것을 의미한다. 객체의 의존성을 역전시켜 객체간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다. 기존의 자바 어플리케이션은 자바 객체를 생성하고, 서로간의 의존 관계에 대한 제어권이 개발되는 어플리케이션에 있었는데, ioc를 통해 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 생성한 객체에 주입할 수 있다.

 

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

 

1.객체생성

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

3.의존성 객체 메소드 호출

 

스프링이 모든 의존성 객체를 스프링이 실행될 때 모두 생성하고, 필요한 곳에 주입시켜 줌으로서 Bean은 싱글톤 패턴의 특징을 가지며, 제어의 흐름을 사용자가 컨트롤하는 것이 아니라 스프링에게 맡겨 작업을 처리하게된다. 

 

 



출처: https://cofived.tistory.com/39 [henjun's dev journal]

'스프링' 카테고리의 다른 글

스프링, 스프링 부트 접미사  (0) 2022.04.24
Spring Annotation 정리  (0) 2022.04.16
스프링 배치 프로세스  (0) 2022.04.16
ORM과 JPA에 대하여  (0) 2022.03.29
[카프카]카프카에 대하여  (0) 2021.12.12