DI: 일부 핵심 클래스에 종속성을 주입
ServiceLocator: 모든 클래스가 서비스 로케이터에 종속
DI: 처음 한번만 호출(명시적인 호출X)
ServiceLocator: 인젝터를 직접 호출(명시적인 호출)
DI: 의존 관계 파악이 쉬움
ServiceLocator: 의존 관계 파악이 어려움
class Controller(val service: BusinessService)
class BusinessService()
val myModule = module{
single{Controller(get())}
single{BuisnessService()}
}
single 키워드로 싱글톤으로 만들었다는 것 확인 할 수 있다(다른 키워드는 밑에서 확인 가능)
class Controller(val service:BusinessService){
fun hello(){
service.sayHello()
}
}
뷰에서 by 키워드로 Delegate 받는다.
class MyActivity:AppCompatActivity(){
val service: BusinessService by inject()
}
+ module{...} : 키워드로 주입 받고자 하는 객체의 집합
+ single{...} : 앱이 실행되는 동안 계속 유지되는 싱글톤 객체 생성
+ factory{...} : 요청할 때마다 매번 새로운 객체를 생성
+ get() : 컴포넌트 내에서 알맞은 의존성을 주입