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: 환경변수와 빌드 (0) | 2023.08.23 |
---|---|
TIL 6: MVP(Minimum Viable Product) (0) | 2023.08.10 |
TIL 4: RDD (0) | 2023.07.12 |
TIL 3: Tech Spec (0) | 2023.07.07 |
TIL 2: Rendering (CSR, SSR) (0) | 2023.07.04 |