issues
search
yeomko22
/
TIL
Today I learned
1
stars
0
forks
source link
Dependency Injection
#85
Open
yeomko22
opened
3 years ago
yeomko22
commented
3 years ago
참고
https://en.wikipedia.org/wiki/Dependency_injection
Dependency Injection이란?
하나의 객체가 이것이 의존하고 있는 다른 객체들을 수신하는 기법이다.
수신하는 측을 클라이언트, 전달되는 측을 서비스라고 부른다.
서비스를 클라이언트에 건네주는 코드를 인젝터라고 부른다.
클라이언트가 어떤 서비스를 사용할 지 명시하는 대신에 인젝터가 클라이언트에게 어떤 서비스를 써도 되는지 알려주는 것이다.
인젝션은 의존성의 전달을 지칭한다.
서비스는 클라이언트의 상태로 구성된다. 클라이언트가 직접 서비스를 만들거나 찾도록 하는 것 대신 서비스를 클라이언트에 전달하는 것이 이 패턴의 핵심이다.
Dependency Indejection은 왜 필요할까?
관심의 분리를 목적으로 한다.
즉, 객체의 생성과 사용을 분리한다. 이는 코드의 가독성과 재사용성을 높여준다.
이는 Inversion of Control의 한 기법에 해당한다.
서비스를 호출하는 클라이언트의 입장에서는 그 서비스들을 어떻게 만드는지 몰라도 된다.
대신에 클라이언트는 서비스를 제공하는 것에 대한 책임을 외부 코드에 위임한다.
클라이언트는 인젝터의 코드를 호출하지 않는다. 서비스를 만드는 것은 어디까지나 인젝터이다.
이는 클라이언트가 인젝터에 대해서도 몰라도 되고, 서비스를 어떻게 만드는지도 몰라도 되고, 어느 서비스를 이것이 사용하고 있는지도 몰라도 된다.
클라이언트는 단지 서비스의 인터페이스만 알면 된다.
이는 즉, "use"와 "construction"에 대한 책임을 분리하는 것이다.
yeomko22
commented
3 years ago
Inversion of Control
IoC는 dependency injection 보다 더 일반적이다. 즉, 다른 코드를 호출하기보다 다른 코드가 나를 호출하게끔 하는 것이다.
dependency injection이 없는 IoC는 template method 패턴이라 부른다.
dependnecy injection은 IoC를 composition을 통해서 구현한다. 이는 strategy pattern과 동일하다.
참고
Dependency Injection이란?
Dependency Indejection은 왜 필요할까?