DI, IoC에 대해서...
DI란?
DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 위존관계 주입기능
- 객체를 직접 생성하는 것이 아니라, 외부에서 생성 후 주입시켜주는 방식
- 모듈 간 결합도가 낮아지고 유연성이 높아진다.
- 가독성이 높아진다
생성자 주입(Constructor Injectioln)
public class A {
private B b;
public A(B b) {
this.b = b;
}
}
Setter 주입(Setter Injection)
public class A {
private B b;
public void setB(B b) {
this.b = b;
}
}
인터페이스 주입(Interface Injection)
public interface BInjection {
void inject(B b);
}
public A implements BInjection {
private B b;
@Override
public void inject(B b) {
this.b = b;
}
}
<1>은 A객체가 new생성자를 틍해 B,C객체를 직접 생성
<2>은 외부에서 생성된 객체를 setter()를 통해 사용함==>의존성 주입의 예시
-->A객체에서 B,C 객체를 사용할 때 직접 생성이 아니라 외부(IoC컨테이너)에서 생성된 B,C 객체를 주입시켜 setter or 생성자를 통해 사용하는 방식
스프링에서는 객체를 Bean이라고 부르며, 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 한다.
IoC란?
IoC(Inversion of Control)란 "제어의 역전"이라는 의미. 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미
- 객체의 의존성을 역전시켜 객체 간 결합도를 줄이고 유연한 코드를 작성할 수 있게 한다.
- 가독성 및 코드의 중북 , 유지 보수를 편하게 한다.
- 스프링이 모든 의존성 객체를 스프링이 실행될때 만들어주고 필요한 곳에 주입 -> Bean은 싱글턴 패턴의 특징을 가진다.
- 제어의 흐름을 사용자가 컨트롤하는 것이 아니라 스프링에 맡겨 작업을 처리하게 된다.
<기존 객체 생성, 실행>
- 객체 생성
- 의존성 객체 생성(클래스 내부에서)
- 의존성 객체 메소드 호출
<스프링에서 객체 생성, 실행>
- 객체 생성
- 의존성 객체 주입(스스로 만들지 X, 제어권을 스프링에 위임하여 스프링이 만들어놓은 객체를 주입)
- 의존성 객체 메소드 호출
'스파르타 부트캠프(spring)' 카테고리의 다른 글
[내일배움캠프_Spring] 자바 Spring 입문_221219 (0) | 2022.12.19 |
---|---|
[내일배움캠프_spring] 주간회고 WIL - 6주차 (0) | 2022.12.18 |
[내일배움캠프_Spring] 자바 Spring 입문_221215 (0) | 2022.12.15 |
[내일배움캠프_Spring] 자바 Spring 입문_221214 (0) | 2022.12.14 |
[내일배움캠프_Spring] 자바 Spring 입문_221213 (1) | 2022.12.13 |