1. IoC (Inversion of Control)
Inversion of Control의 뜻은 "제어의 역전"이다. 여기서 말하는 제어는, 객체를 직접 생성하거나 찾는 방식에서 벗어나 Spring Framework의 IoC 컨테이너 에게 제어의 권한을 넘김으로써, IoC 컨테이너가 필요할 때 알아서 객체를 생성하고 필요한 의존성을 알아서 주입을 해주는 방식을 의미한다.
- 객체의 제어를 외부에서 담당하게 한다는 폭 넓은 개념
- IoC Container에게 제어 권한을 넘긴다는 개념
* IoC Container : Spring Framework가 의존성 주입을 자동을 해주기 위한 "Bean"들의 집합과 "Bean"들을 관리해주는 공간이다.
* Bean : Spring Framework가 관리하는 객체들을 "Bean"이라고 한다. ( 자세한 설명은 추후에 다루겠다. )
2. DI (Dependency Injection)
Dependency Injecton의 뜻은 "의존성 주입"이다. 여기서 말하는 "의존"이란, 객체 A가 다른 객체 B를 생성하거나 참조할 때, A는 B에 "의존"한다고 말할 수 있다. 이것을 "의존 관계" 라고 말할 수 있다.
public class A {
private B b;
public A() {
this.b = new B(); // 생성을 통한 의존관계
// A는 B를 의존 하고 있음. 둘은 의존 관계이다.
}
}
"의존"이란걸 이해를 했다면, 이제 "의존성 주입(DI)"에 대해 알아보자.
"의존성 주입"은 말그대로 "참조를 통해 외부에서 객체를 주입해주는 방식"이다.
public class A {
private B b;
public A(B b) {
this.b = b; // 참조를 통한 의존 관계
}
}
3. DI (Dependency Injection) 장점
1. 결합도 감소
A 객체와 B 객체 간의 결합도가 낮아진다. A 객체가 B 객체를 직접 생성하지 않기 때문에, B 객체가 만약 인터페이스나 추상클래스일 경우 구현체가 바뀌더라도 A 객체의 코드의 변경이 없어진다는 장점이 있다. ( 유지 보수성 향상 )
2. 유연성과 확장성
외부에서 주입받는 의존성을 필요에 따라 쉽게 변경이 가능하다. 구현체를 바꿈으로써, 기존 코드의 변경 없이 새로운 기능이나 요구 사항에 대응할 수 있다는 "유연성"과 "확장성"을 가지게 된다.
3. 코드 재사용성 증가
여러 클래스가 동일한 의존성을 필요로 하면, 의존성 주입을 통해 동일한 객체를 여러 클래스에서 재사용을 할 수 있다. 이를 통해 코드의 중복을 줄일 수 있고, 유지보수성을 높일 수 있다.
결론
IoC는 외부에 객체 생성과 주입에 대한 제어를 맡긴다는 의미이고, DI는 IoC의 객체 주입을 실제로 구현한 개념이다.
참조 ( Spring 공식 문서 )
https://docs.spring.io/spring-framework/reference/core/beans/introduction.html
'Spring Framework' 카테고리의 다른 글
[Spring Framework] (4) - IoC 컨테이너 동작 원리 (0) | 2024.11.14 |
---|---|
[Spring Framework] (3) - IoC 컨테이너 & Bean 개념 이해 하기 (1) | 2024.10.21 |
[Spring Framework] (1) - Spring & Spring Framework 차이 (0) | 2024.10.19 |