TL;TR
의존관계란: B 클래스가 바뀔 때 A 클래스가 영향을 받는다는 것
DI(의존성 주입)이란: 클래스 간 의존관계를 외부에서 결정하고 주입하는 것
IoC Container란: 자동으로 의존성을 주입하기 위한 프레임워크
Dependency 의존관계란
“A가 B를 의존한다.”
B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다. 즉, B 클래스가 바뀔 때 A 클래스가 영향을 받는다는 것.
class Programmer() {
private coffee: Coffee;
public constructor() {
this.coffee = new Coffee();
}
public startProgramming() {
this.coffee.drink();
}
}
위 코드와 같이 Programmer 생성자에서 직접 Coffee 인스턴스를 생성하고, startProgramming()이 실행되기 위해선 Coffee 클래스가 필요하다. 또한 Coffee 클래스가 변경되면 Programmer 클래스도 같이 수정돼야 하는 문제가 발생하기 때문에, 'Programmer 클래스는 Coffee 클래스에 의존한다'라고 말할 수 있다.
Dependencly Injection(의존성 주입)이란
클래스 간 의존관계를 외부에서 결정하고 주입하는 것
class Programmer() {
public constructor(
private coffee: Coffee;
) {
this.coffee = coffee;
}
}
class Company() {
public startWork() {
const programmer = new Progammer(new Coffee());
}
}
위 코드는 의존성을 생성자에서 주입하는 방법이다. Programmer 클래스 외부에서 의존관계를 선언하기 때문에 앞서 설명한 코드에 비해 결합도가 낮아졌다.
IoC Container(Inversion of Control Container) = DI Container란
객체의 의존성을 개발자가 결정하는 것이 아닌 프레임워크가 제어를 하기 때문에 IoC(제어의 역전)이라고 부르고, 인스턴스를 저장하는 공간을 Container라고 부른다. 즉, IoC Container는 자동으로 의존성을 주입하기 위한 프레임워크며, 객체의 생성, 생명 주기를 관리하고 의존성 있는 객체를 다른 객체에게 주입하는 역할을 한다.
마치며
Angular를 배울 때 처음 접한 개념이었다. 그때는 이해하기 어려워서 '그렇구나~'하고 넘어갔었는데, 최근에 당연시했던 DI를 다시 공부하고 싶어 져서 찾아보게 되었다. 이번 기회에 개념을 확실히 이해한 것 같고 이제 DI와 IoC를 정확하게 설명할 수 있을 것 같다!
출처
아래의 글들을 참고하여 개인 공부 목적으로 정리한 글입니다.
https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
https://medium.com/sjk5766/dependency-injection-ioc-dip-ioc-container%EC%A0%95%EB%A6%AC-310885cca412
https://kotlinworld.com/64
https://velog.io/@wlsdud2194/what-is-di
'TIL' 카테고리의 다른 글
| TIL 7: 환경변수와 빌드 (1) | 2023.08.23 |
|---|---|
| TIL 6: MVP(Minimum Viable Product) (2) | 2023.08.10 |
| TIL 4: RDD (0) | 2023.07.12 |
| TIL 3: Tech Spec (0) | 2023.07.07 |
| TIL 2: Rendering (CSR, SSR) (1) | 2023.07.04 |